区域截图(不用剪贴板)

zyyou 2009-04-29 12:33:42
下面这段代码可以实现区域截图,但截图后图片保存在剪贴板内,不知道有没有办法不用到剪贴板来实现(剪贴板以外的部份尽量不要改动,准备用这段代码编译成dll).
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, lpInitData As Long) As Long

Public Function SnapArea(xSrc, ySrc, nWidth, nHeight, fp)

SourceDC = CreateDC("DISPLAY", 0, 0, 0)
DestDC = CreateCompatibleDC(SourceDC)
Bhandle = CreateCompatibleBitmap(SourceDC, nWidth, nHeight)
SelectObject DestDC, Bhandle
BitBlt DestDC, 0, 0, nWidth, nHeight, SourceDC, xSrc, ySrc, &HCC0020
OpenClipboard 0
EmptyClipboard
SetClipboardData 2, Bhandle
CloseClipboard
DeleteDC DestDC
ReleaseDC Dhandle, SourceDC
Picture1.Picture = Clipboard.GetData()
SavePicture Clipboard.GetData(), fp
End Function

Private Sub Command1_Click()
Call SnapArea(Text1.Text, Text2.Text, Text3.Text, Text4.Text, "C:\test.bmp")
End Sub


...全文
123 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
嗷嗷叫的老马 2009-04-29
  • 打赏
  • 举报
回复
添加这个模块:

http://www.m5home.com/bbs/dispbbs.asp?boardid=28&Id=1464&page=3

然后作如下调用:

Set picture1.picture = CaptureWindow(GetDesktopWindow(), True, x, y, width, height)

返回值直接就是Picture对象,赋值给Picture属性即可.

后4个参数指定区域,单位象素.

1,488

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧