SầuOnline
06-04-2008, 10:07 PM
Chụp ảnh màn hình bằng VB6
Trong VB6, hàm SendKeys cho phép gửi đi một phím giống như khi ta nhấn phím đó từ bàn phím, nhưng hàm này không hỗ trợ nhấn phím PrtSc (Print Screen). Bạn phải dùng hàm API để nhấn phím PrtSc hoặc Alt+PrtSc.
Bạn hãy tạo mới một project kiểu Standard EXE. Trên form mặc định vẽ một PictureBox control có tên Picture1, một Timer control có tên Timer1 với thuộc tính Interval là 1000, rồi gõ vào đoạn mã 1. Bạn lưu ý: ảnh được ghi lên đĩa luôn luôn là ảnh chụp được ở lần nhấn phím liền trước đó.
Option Explicit
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal _
bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Function GetVersionExA Lib "kernel32" _
(lpVersionInformation As OSVERSIONINFO) As Integer
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type
Private Const KEYEVENTF_KEYUP = &H2
Private Const VK_SNAPSHOT = &H2C
Private Const VK_MENU = &H12
Dim blnAboveVer4 As Boolean
Private Sub Form_Load()
Dim osinfo As OSVERSIONINFO
Dim retvalue As Integer
osinfo.dwOSVersionInfoSize = 148
osinfo.szCSDVersion = Space$(128)
retvalue = GetVersionExA(osinfo)
If osinfo.dwMajorVersion > 4 Then blnAboveVer4 = True
Picture1.Visible = False
End Sub
Private Sub Timer1_Timer()
‘ Chụp bằng phím PrtSc
If blnAboveVer4 Then
keybd_event VK_SNAPSHOT, 0, 0, 0
Else
keybd_event VK_SNAPSHOT, 1, 0, 0
End If
Picture1.Picture = Clipboard.GetData(vbCFBitmap)
DoEvents ‘ Để cho Picture1 nhận hết ảnh từ clipboard
If Picture1.Picture <> 0 Then
SavePicture Picture1.Picture, "D:\Hinh.JPG" ‘ Lưu ảnh lên đĩa
End If
End Sub
Trong VB6, hàm SendKeys cho phép gửi đi một phím giống như khi ta nhấn phím đó từ bàn phím, nhưng hàm này không hỗ trợ nhấn phím PrtSc (Print Screen). Bạn phải dùng hàm API để nhấn phím PrtSc hoặc Alt+PrtSc.
Bạn hãy tạo mới một project kiểu Standard EXE. Trên form mặc định vẽ một PictureBox control có tên Picture1, một Timer control có tên Timer1 với thuộc tính Interval là 1000, rồi gõ vào đoạn mã 1. Bạn lưu ý: ảnh được ghi lên đĩa luôn luôn là ảnh chụp được ở lần nhấn phím liền trước đó.
Option Explicit
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal _
bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Function GetVersionExA Lib "kernel32" _
(lpVersionInformation As OSVERSIONINFO) As Integer
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type
Private Const KEYEVENTF_KEYUP = &H2
Private Const VK_SNAPSHOT = &H2C
Private Const VK_MENU = &H12
Dim blnAboveVer4 As Boolean
Private Sub Form_Load()
Dim osinfo As OSVERSIONINFO
Dim retvalue As Integer
osinfo.dwOSVersionInfoSize = 148
osinfo.szCSDVersion = Space$(128)
retvalue = GetVersionExA(osinfo)
If osinfo.dwMajorVersion > 4 Then blnAboveVer4 = True
Picture1.Visible = False
End Sub
Private Sub Timer1_Timer()
‘ Chụp bằng phím PrtSc
If blnAboveVer4 Then
keybd_event VK_SNAPSHOT, 0, 0, 0
Else
keybd_event VK_SNAPSHOT, 1, 0, 0
End If
Picture1.Picture = Clipboard.GetData(vbCFBitmap)
DoEvents ‘ Để cho Picture1 nhận hết ảnh từ clipboard
If Picture1.Picture <> 0 Then
SavePicture Picture1.Picture, "D:\Hinh.JPG" ‘ Lưu ảnh lên đĩa
End If
End Sub