PDA

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



Sameboy0511
یک شنبه 25 مرداد 1394, 17:19 عصر
سلام

قبلا هم پرسیدم با چند تا سوال دیگه اما چون قوانین و نقض کرده بود پاک شد پستم.

چجوری میشه برنامه نوشت که با فشار دادن کلید F8 بیاد یک عکس از همون حالتی که هست بگیره از صفحه مانیتور و سیو کنه جایی که بهش آدرس داده میشه.

یک راهنمایی کلی بکنین و اگه بتونین سورسشو هم بزارین ممنون میشم

mehdi.safavie
یک شنبه 25 مرداد 1394, 18:13 عصر
اینا رو تعریف کن


Private Declare Function CreateDC Lib "gdi32" Alias _
"CreateDCA" (ByVal lpDriverName As String, _
ByVal lpDeviceName As String, ByVal lpOutput As String, _
ByVal lpInitData As String) As Integer


Private Declare Function CreateCompatibleDC Lib "GDI32" _
(ByVal hDC As Integer) As Integer


Private Declare Function CreateCompatibleBitmap Lib "GDI32" _
(ByVal hDC As Integer, ByVal nWidth As Integer, _
ByVal nHeight As Integer) As Integer


Private Declare Function GetDeviceCaps Lib "gdi32" Alias _
"GetDeviceCaps" (ByVal hdc As Integer, _
ByVal nIndex As Integer) As Integer


Private Declare Function SelectObject Lib "GDI32" _
(ByVal hDC As Integer, ByVal hObject As Integer) As Integer


Private Declare Function BitBlt Lib "GDI32" _
(ByVal srchDC As Integer, _
ByVal srcX As Integer, ByVal srcY As Integer, _
ByVal srcW As Integer, ByVal srcH As Integer, _
ByVal desthDC As Integer, ByVal destX As Integer, _
ByVal destY As Integer, ByVal op As Integer) As Integer


Private Declare Function DeleteDC Lib "GDI32" _
(ByVal hDC As Integer) As Integer


Private Declare Function DeleteObject Lib "GDI32" _
(ByVal hObj As Integer) As Integer


Const SRCCOPY As Integer = &HCC0020


Private bmpBackground As Bitmap
Private intWidth, intHeight As Integer


Protected Sub CaptureScreen()


Dim hsdc, hmdc As Integer
Dim bmpHandle, OLDbmpHandle As Integer
Dim releaseDC As Integer


hsdc = CreateDC("DISPLAY", "", "", "")
hmdc = CreateCompatibleDC(hsdc)


intWidth = GetDeviceCaps(hsdc, 8)
intHeight = GetDeviceCaps(hsdc, 10)
bmpHandle = CreateCompatibleBitmap(hsdc, _
intWidth, intHeight)


OLDbmpHandle = SelectObject(hmdc, bmpHandle)
releaseDC = BitBlt(hmdc, 0, 0, intWidth, _
intHeight, hsdc, 0, 0, 13369376)
bmpHandle = SelectObject(hmdc, OLDbmpHandle)


releaseDC = DeleteDC(hsdc)
releaseDC = DeleteDC(hmdc)


bmpBackground = _
Image.FromHbitmap(New IntPtr(bmpHandle))
DeleteObject(bmpHandle)


End Sub


حالا این کد ها برات عکس میگیره اط صفحه مانیتورت هر جا به هر طریقی دوست داری ازشون استفاده کن .


CaptureScreen()


PictureBox1.Image = bmpBackground


PictureBox1.Image.Save("Capture.jpg")


منبع (http://www.codeguru.com/columns/vb/how-to-capture-a-screen-print-screen-with-visual-basic.html)

Sameboy0511
دوشنبه 26 مرداد 1394, 10:08 صبح
خب میخوام هر دفعه با یک نیم سیو بشه چیکار کنم؟ الان کدی که برای نیم متفاوت بودنش گزاشتم اینه بگین این کد اشتباهه یا نه؟چون ارور میده و درست اجرا نمیشه



Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
CaptureScreen()
PictureBox1.Image = bmpBackground
Dim ss As Integer = 0
While ss < 1000
ss = +1
Select Case ss
Case My.Computer.FileSystem.FileExists("Capture" + ss + ".jpg")
Continue While
Case Else
PictureBox1.Image.Save("Capture" + ss + ".jpg")
Exit While
End Select
End While
End Sub

Sameboy0511
دوشنبه 26 مرداد 1394, 13:19 عصر
دوستان مشکلم حل شد.
من این کارو کردم :

یک module ساختم و اینا رو بش دادم :


Imports System.IO

Module Module1
Public Function GetRandomString()
Dim p As String = Path.GetRandomFileName()
Return p
End Function
End Module


اما این میاد یک اسم به این صورت میسازه fuefh2sdf.aer که خودشم یک پسوند بهش میده.پس باید بعد از:
Dim p As String = Path.GetRandomFileName()

که بیاد نقطه ای که بین پسوند و خوده اسم فایل هست و برداره به این شکل :
p = p.Replace(".", "")

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


Imports System.IO

Module Module1
Public Function GetRandomString()
Dim p As String = Path.GetRandomFileName()
p = p.Replace(".", "")
Return p
End Function
End Module


حالا تو فرم اصلیمون تو یک Button یا هرچیزی که میخواین عکس بگیرین میاین این module رو فراخونی میکنین و جایگذاری میکنین که به این شکل میشه.


Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim ScreenName As String
ScreenName = Module1.GetRandomString()
CaptureScreen()
PictureBox1.Image = bmpBackground
PictureBox1.Image.Save(ScreenName + ".jpg")
End Sub


حالا با هربار کلیک کردن یک عکس از صفحه شما میگیره و اونو با یک نیم متفاوت سیو میکنه.
برخی نیم هایی که ساخته شده :
aoyft1wzlrv.jpg
ghi2gfsedk0.jpg
st2lfyd30mt.jpg


تشکر فراموش نشه : )