PDA

View Full Version : سوال: مشکل در گرفتن اسکرین شات



hosein3000
یک شنبه 28 اسفند 1390, 11:40 صبح
با سلام خدمت دوستان

من از کد زیر برای چاپ و گرفتن اسکرین شات استفاده می کنم تو سیستم من بدون هیچ مشکلی کار می کنه و وقتی با setup factory 9 فایل رو setup درست می کنم تو سیستم کاربر خطا می ده و اسکرین شات نمی گیره و به چاپگر ارسال نمیکنه .
با خود setup factory فایل های ضروری رو اسکن کردم و به برنامه اضافه کردم. به نظر شما کدوم فایل ناقصه که تو سیستم کاربر خطا می ده و یا به چه علت میتونه باشه.اگه اسم فایل رو بگین من به پروژه ام اضافه کنم و یا اینکه علت کار نکردنشو ممنون میشم.

با تشکر


Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
ByVal bScan As Byte, ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)
Const VK_MENU As Byte = &H12
Const VK_SNAPSHOT As Byte = &H2C
Const KEYEVENTF_KEYUP = &H2

Private Sub jcbutton5_Click()
On Error GoTo Errprint
Dim lWidth As Long, lHeight As Long
Clipboard.Clear
Call keybd_event(VK_MENU, 0, 0, 0)
Call keybd_event(VK_SNAPSHOT, 0, 0, 0)
DoEvents
Call keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0)
Call keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0)
Printer.Print
If Width > Printer.ScaleWidth Then
lWidth = Printer.ScaleWidth
lHeight = (Printer.ScaleWidth / Width) * Height
Else
lWidth = Width
lHeight = Height
End If
Printer.PaintPicture Clipboard.GetData, 0, 0, lWidth, lHeight
Printer.EndDoc
Exit Sub
Errprint:
p = MsgBox("ÇäÌÇã ÚãáíÇÊ Ç ÊæÓØ ˜ÇÑÈÑ áÛæ ÔÏ.åãæÇÑå ãí ÊæÇäíÏ ÈÑÇí ÇäÌÇã Ìǁ ãÌÏÏ ÇÒ Ï˜ãå Ç ÏÑæä ÝÑã åÇ ÇÓÊÝÇÏå äãÇííÏ", vbInformation + vbMsgBoxRight + vbMsgBoxRtlReading, "ÈÑæÒ ÎØÇ åäÇ㠍ǁ")
End Sub

AbbasVB
یک شنبه 28 اسفند 1390, 12:07 عصر
من برنامه ات رو اجرا کردم مشکلی نداشت
ممکنه که سیستم کاربر پرینتر نداشته باشه
ممکنه روسیستم کاربر ران تایم نصب نشده باشه

بهروز عباسی
یک شنبه 28 اسفند 1390, 17:16 عصر
درود دوست عزیز

برنامت رو با ویندوز سون کامپایل میکنی یا ایکس پی اگه با سون کامپایل کنی در ایکس پی اجرا نمیشه(گاهی)


فایل رو setup درست می کنم تو سیستم کاربر خطا می ده
چه خطای میده کمی بیشتر توضیح بده

hosein3000
یک شنبه 28 اسفند 1390, 21:08 عصر
با تشکر

ولی من تمام فایل های ضروری رو همراه setup گذاشتم و تو سیستم من بدون هیچ مشکلی کار می کنه ولی تو سیستم کاربر خطای زیر رو میده
ویندوز کاربر ویندوز 7 هستش البته ویندوز خودم هم ویندوز 7

عکس خطا رو پیوست کردم

setroyd
یک شنبه 28 اسفند 1390, 23:36 عصر
مشکل از کار با clipboard هست شما از کدی استفاده کن که نیاز به استفاده از کلیپ بورد نباشه .

Mr'Jamshidy
دوشنبه 29 اسفند 1390, 00:24 صبح
نه دوست من

اصولا کاربرانی که از ویندوز سون استفاده میکنن هیچ وقت توجه به UAC ویندوز سون ندارن

به احتمال 99% UAC ویندوز اجازه دسترسی شما رو به Clip Board تایید نمیکنه

برنامه رو از طریق Run as administrator اجرا کن و جواب رو ارسال کن

hosein3000
دوشنبه 29 اسفند 1390, 00:28 صبح
خوب درسته مشکل از کلیپ بورد هست
تو سایت مایکرو سافت که نگاه کردم نوشته بود که سایر برنامه ها از clipboard استفاده می کنند به همین علت این خطا رو میده.نکته جالب اینجاست که وقتی توی taskmanager روی یکی از پروسس ها به نام dwm.exe یا همون windows desktop maneger ،- راست کلیک کرده و end prosses می کنم حالت گرافیکی ویندوز از حالت areo خارج میشه و این کد درست کار می کنه . اعصابمو به هم ریخته
در کل من از کد زیر برای ذخیره فرم به عنوان فایل تصویری استفاده می کنم.یعنی اول فرم رو به کلیپ بورد ارسال می کنه و بعد اونو با فرمت bmp ذخیره می کنه تو فولدر pictures
حالا اگه شما راه حله دیگه ای برای این کار بدون استفاده از کلیپ بورد دارید ممنون میشم لطف بفرمایید برام بگید
با تشکر

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
ByVal bScan As Byte, ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)
Const VK_MENU As Byte = &H12
Const VK_SNAPSHOT As Byte = &H2C
Const KEYEVENTF_KEYUP = &H2
Private Sub Command1_Click()

Dim sSav$
Dim lWidth As Long, lHeight As Long
Clipboard.Clear
Call keybd_event(VK_MENU, 0, 0, 0)
Call keybd_event(VK_SNAPSHOT, 0, 0, 0)
DoEvents
Call keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0)
Call keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0)
If Width > Printer.ScaleWidth Then
lWidth = Printer.ScaleWidth
lHeight = (Printer.ScaleWidth / Width) * Height
Else
lWidth = Width
lHeight = Height
End If
If Dir(sSav$) = "" Then MkDir sSav$
sSav$ = App.Path & "\Pictures\"
SavePicture Clipboard.GetData, sSav$ & Me.Caption & ".BMP"
Clipboard.Clear
Exit Sub
Clip_Error:

End Sub

Mr'Jamshidy
دوشنبه 29 اسفند 1390, 01:00 صبح
این سورس از کد شما خیلی بهتر عمل میکنه

از دسکتاپ عکس میگیره و در مسیر C:\Desktop.bmp ذخیره میکنه

کد رو به نسبت نیازت تغییر بده

http://barnamenevis.org/attachment.php?attachmentid=82260&d=1328730307

hosein3000
دوشنبه 29 اسفند 1390, 01:20 صبح
دست شما درد نکنه اقای جمشیدی

ولی خوبی کد من این بود که فقط از فرم فعال عکس می گرفت و ذخیره می کرد اما من هر کاری کردم نتونستم کد شما رو اینطوری تغییر بدم

یعنی فقط فرم فعال رو ذخیره کنه

Mr'Jamshidy
دوشنبه 29 اسفند 1390, 10:35 صبح
با کمی فکر میتونی همچین چیزی ازش در بیاری

سعی کن خودت متوجه میشی

hosein3000
دوشنبه 29 اسفند 1390, 10:38 صبح
مهندس زیاد فکر کردم نشد
از دیشب تا الان دارم روش کار می کنم !!!! :گریه:
ممنون میشم کمکم کنین
مرسی

hosein3000
دوشنبه 29 اسفند 1390, 16:33 عصر
مهندس زیاد فکر کردم نشد
از دیشب تا الان دارم روش کار می کنم !!!! :گریه:
ممنون میشم کمکم کنین
مرسی

از دوستان کسی برای مشکل من راه حلی نداره؟؟

AbbasVB
دوشنبه 29 اسفند 1390, 19:52 عصر
فکر کنم با این دیگه مشکل شما حل بشه مشکل کد شما گرفتن دیتا از کلیپ برد بود

فقط یه کنترل Image نیاز داره

امشب شب عیده و عید همه مبارک:لبخند:


Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
ByVal bScan As Byte, ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)
Const VK_MENU As Byte = &H12
Const VK_SNAPSHOT As Byte = &H2C
Const KEYEVENTF_KEYUP = &H2
Private Sub Command1_Click()
Dim lWidth As Long, lHeight As Long
Clipboard.Clear
Call keybd_event(VK_MENU, 0, 0, 0)
Call keybd_event(VK_SNAPSHOT, 0, 0, 0)
DoEvents
Call keybd_event(VK_SNAPSHOT, 0, KEYEVENTF_KEYUP, 0)
Call keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0)
Dim objPic As IPictureDisp
If Clipboard.GetFormat(vbCFBitmap) Then

Set objPic = Clipboard.GetData(vbCFBitmap)
SavePicture objPic, "c:\test.bmp"
End If
Image1.Picture = LoadPicture("c:\test.bmp")
End Sub

hosein3000
سه شنبه 01 فروردین 1391, 01:19 صبح
مهندس اینم نشد

setroyd
سه شنبه 01 فروردین 1391, 01:21 صبح
با bitblt و GetForGroundWindow میتونی این کد رو بنویسی به راحتی اگه خواستی بگو برات مینویسم میزارم اگرم کارت راه افتاده که هیچی .