怎样判断剪贴板中的内容是否被刷新。
用HOOK ,注意:是刷新,不是改变 问题点数:100、回复次数:2Top
1 楼qsheep(阿里路亚)回复于 2002-02-15 00:39:17 得分 10
I did can help you ,i love score score 分分分分 huohuo....
look below:
//USE SetClipboardViewer API
The SetClipboardViewer function adds the specified window to the chain of clipboard viewers. Clipboard viewer windows receive a WM_DRAWCLIPBOARD message whenever the content of the clipboard changes.
Public Declare Function SetClipboardViewer Lib "user32" Alias "SetClipboardViewer" (ByVal hwnd As Long) As Long
hwnd // handle to clipboard viewer window
例如:
sub form_load()
dim iPrev as long
iPrev=SetClipboardViewer(me.hwnd)
end sub
当change时,form 收到 WM_DRAWCLIPBOARD 消息,OK?ahah.Top
2 楼Chice_wxg(学)(习)回复于 2002-02-15 07:59:23 得分 90
什么叫刷新?如果刷新了内容不变,与不刷新不是一样吗?
1、程序开始设置监视器:
SetNewWndProc frmMain.hwnd
NextViewerHandle = SetClipboardViewer(Me.hwnd)
2、程序结束,关闭监视
UnsetNewWndProc Me.hwnd
ChangeClipboardChain Me.hwnd, NextViewerHandle
3、模块声明:
Public Const GWL_WNDPROC = (-4)
Public Const WM_CHANGECBCHAIN = &H30D
Public Const WM_DRAWCLIPBOARD = &H308
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
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
Declare Function SetClipboardViewer Lib "user32" (ByVal hwnd As Long) As Long
Declare Function ChangeClipboardChain Lib "user32" (ByVal hwnd As Long, ByVal hWndNext As Long) As Long
Public OldWindowProc As Long
Public NextViewerHwnd As Long
'参数含义如下:
'h---hWnd句柄 m---Msg消息号 w---wParam系统第1参数 l---lParam系统第2参数
Public Function WindowProc(ByVal h As Long, ByVal m As Long, ByVal w As Long, ByVal l As Long) As Long
Select Case m
Case WM_CHANGECBCHAIN:
If w = NextViewerHwnd Then
NextViewerHwnd = l
Else
If NextViewerHwnd <> 0 Then SendMessage NextViewerHwnd, m, w, l
End If
Case WM_DRAWCLIPBOARD:
If NextViewerHwnd <> 0 Then SendMessage NextViewerHwnd, m, 0, 0
好了,这里就是要处理的地方。用户执行了拷贝命令!剪贴板被改变/刷新了
End Select
WindowProc = CallWindowProc(OldWindowProc, h, m, w, l)
End Function
Public Sub SetNewWndProc(ByVal hwnd As Long)
OldWindowProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Sub UnsetNewWndProc(ByVal hwnd As Long)
SetWindowLong hwnd, GWL_WNDPROC, OldWindowProc
End Sub
注;以上代码是我的一个软件的部分代码,调试通过!完全正常。Top




