Visual Basic 8 (2005)质量保证Visual Studio 2005Windows 2000设计/图形Windows XP中级开发Visual StudioWindows.NETVisual Basic
屏幕截图工具
一个适用于开发人员以及普通用户的屏幕截图工具。
引言
JPG Capture 是一个为开发人员设计的用于捕获调试截图的工具,同时它也适用于一般的屏幕截图目的。JPG Capture 可以将桌面屏幕捕获为连续的图片文件。用户可以定义捕获热键、捕获区域(当前窗口、全屏或矩形区域)、图片格式(JPG、GIF、BMP 等)以及目标位置。
设置热键
该程序使用 Win32 API 函数 RegisterHotKey
来设置系统范围的热键。
<DllImport("user32", EntryPoint:="RegisterHotKey", _
SetLastError:=True, _
ExactSpelling:=True, _
CallingConvention:=CallingConvention.StdCall)> _
Public Function RegisterHotkey(ByVal hwnd As IntPtr, _
ByVal Id As Int32, _
<MarshalAs(UnmanagedType.U4)> ByVal fsModifiers As Int32, _
<MarshalAs(UnmanagedType.U4)> ByVal vkey As Int32) As Boolean
End Function
该程序将一个不可见窗口 inVisibleHotkey
的窗口句柄传递给 RegisterHotKey
函数。每当按下热键时,Windows 消息将被发送到 inVisibleHotkey
窗口,这将触发 HotKey_Press()
例程。
用户可以使用两个参数 fsModifiers
和 vkey
定义热键组合。fsModifiers
可以是 Ctrl、Alt 或 Shift 键。vkey
可以是任何其他键。
Public Enum HotkeyModifierFlags
MOD_ALT = &H1
MOD_CONTROL = &H2
MOD_SHIFT = &H4
MOD_WIN = &H8
End Enum
Public Enum HotkeyVkeyFlags
Key_O = &H4F
Key_G = &H47
Key_T = &H54
End Enum
定义捕获区域
捕获区域可以是当前窗口、全屏或矩形区域。
- 当前窗口选项使用 Win32 API 函数
GetForegroundWindow
来定义捕获区域。 - 全屏选项使用 Win32 API 函数
GetDesktopWindow
来定义捕获区域。 - 矩形区域选项使用一个透明窗口
inVisibleCapWin
来定义捕获区域。当捕获开始时,inVisibleCapWin
窗口将被加载。用户可以使用鼠标绘制一个矩形来定义捕获区域。鼠标按钮释放后,inVisibleCapWin
窗口将被关闭并继续捕获过程。
捕获过程
该程序使用 Win32 API 函数 BitBlt
根据所选的捕获区域来捕获桌面屏幕。
<DllImport("gdi32.dll")> Public Shared _
Function BitBlt(ByVal hObject As IntPtr, ByVal nXDest As Integer, ByVal nYDest As Integer, _
ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal hObjectSource As IntPtr, _
ByVal nXSrc As Integer, ByVal nYSrc As Integer, ByVal dwRop As Integer) As Boolean
End Function
截图文件按顺序保存。该程序使用一个名为 makeup_filename
的例程来生成顺序文件名。
Function makeup_Filename(ByRef Scr_num As Integer, ByVal Dir_Path As String, _
ByVal Prefix_fn As String, ByVal Subfix_fn As String) As String
'combine and generate the filename in sequence
Dim FileName As String
Dir_Path = Standardize_path(Dir_Path)
If Not Directory.Exists(Dir_Path) Then
Directory.CreateDirectory(Dir_Path)
'make sure the directory do exist.
Scr_num = 0
'reset the picture number since the new dir is empty.
End If
Next_num:
If Scr_num < 0 Then Stop
Scr_num = Scr_num + 1
FileName = Dir_Path & Prefix_fn
FileName = FileName & Format(Scr_num, "000")
FileName = FileName & "." & Subfix_fn
If File.Exists(FileName) Then GoTo Next_num
'make sure NOT to overwrite the exsisting file
Return FileName
End Function
配置文件
程序的设置被保存到一个名为 config.ini 的配置文件中。如果配置文件丢失,将创建默认配置文件。
Dir_Path = C:\Lexer_trace\
Prefix_fn = lexer
Subfix_fn = jpg
hotfsModifiers = 2
hotVkey = 71
Area = 2
未来改进
还有一些其他功能可以开发,例如在保存文件之前弹出预览窗口,根据需要调整截图文件的大小等。