有人可以给我一段代码或API,说明我如何使用vb classic(vb 6.0)监控窗口基础操作系统上的任何复制事件。
我想捕获复制事件,假设用户正在计算机上复制文件,我如何获取正在复制的文件的名称并写入该文件在该日期复制的日志。我想创建一个关于文件跟踪的免费程序。我用谷歌搜索,但找不到检测 Windows 上复制事件的代码。请帮忙。
有人可以给我一段代码或API,说明我如何使用vb classic(vb 6.0)监控窗口基础操作系统上的任何复制事件。
我想捕获复制事件,假设用户正在计算机上复制文件,我如何获取正在复制的文件的名称并写入该文件在该日期复制的日志。我想创建一个关于文件跟踪的免费程序。我用谷歌搜索,但找不到检测 Windows 上复制事件的代码。请帮忙。
创建一个 Timer 控件(或将其放在一个循环中DoEvents()
)并GetClipboardData()
像这样使用:
Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetClipboardData Lib "user32" (ByVal wFormat As Long) As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Long, ByVal ByteLen As Long)
Private Sub Timer1_Timer()
Dim ptr As Long
OpenClipboard hwnd
ptr = GetClipboardData(49158)
If ptr Then
Dim size As Long
size = lstrlen(ptr)
If size > 0 Then
Dim data As String
data = Space$(size)
CopyMemory ByVal data, ByVal ptr, size
MsgBox data
End If
End If
CloseClipboard
End Sub
仅供参考:49158 是一种名为“FileName”的私有剪贴板格式,遗憾的是不能与整数一起使用,Clipboard.GetData()
因为该数字对于整数来说太高了。
当您复制某些内容时,该data
变量将包含复制的文件名。
您可以监视剪贴板:ClipBoard Monitor C# 这将涵盖的不仅仅是文件,而且只会告诉您文件名或文件内容已被复制,而不是实际复制的时间。你需要做更多的事情来捕捉实际的写入。
我相信您缺少的术语是“钩子”,在这种情况下,这个问题/答案应该可以满足您的需求:Windows XP/7 copy FILE hook
1)您可以挂钩 WinAPi 函数,如 CopyFile 和 CopyFileEx,创建系统范围的挂钩,自己编写挂钩或使用 API 挂钩库,如 madCodeHook 或 Deviare API 挂钩(我已经使用了这两个库,效果很好。)
2) 编写文件系统过滤器驱动程序。