VB6监视剪贴板图片

最近玩云游戏需要按 PrintScreen 自动保存图片,突然发现色彩风暴剪贴板 CPU 占用高,可能使用了定时设计,立马想到了剪贴板变化信号。

参考:https://bbs.csdn.net/topics/487023,监视剪贴板文字。

改成图片,具体什么意思我也没看懂,Image控件没有hwnd,PictureBox控件有hwnd。

窗体

Private Sub Form_Load()
    SetClipboardViewer Picture1.hwnd
    Show
    prevWndProc = GetWindowLong(Picture1.hwnd, GWL_WNDPROC)
    SetWindowLong Picture1.hwnd, GWL_WNDPROC, AddressOf WndProc
End Sub

Private Sub Form_Unload(Cancel As Integer)
    SetWindowLong Picture1.hwnd, GWL_WNDPROC, prevWndProc
End Sub

模块

Public Declare Function SetClipboardViewer Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long

Public Const WM_DRAWCLIPBOARD = &H308
Public Const GWL_WNDPROC = (-4)

Public prevWndProc As Long

Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    On Error Resume Next
    If Msg = WM_DRAWCLIPBOARD Then
        filepath = "C:\Users\Administrator\Desktop\" & Format(Now, "yyyymmddhhmmss") & ".bmp"
        SavePicture Clipboard.GetData, filepath
    End If
    WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam)
End Function

优点:基本没有CPU占用。

缺点:有窗口,图片只能保存bmp格式。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值