检测Windows上的复制事件

时间:2013-08-11 00:36:42

标签: vb6 systems-programming

有人可以给我一段代码或API,告诉我如何使用vb classic(vb 6.0)监视基于窗口的OS上的任何复制事件。

我想捕获复制事件,假设用户正在复制计算机上的文件,如何获取正在复制的文件的名称,并写入在该日期复制文件的日志。我想创建一个关于文件跟踪的免费程序。我google了,我找不到代码来检测Windows上的复制事件。请帮忙。

3 个答案:

答案 0 :(得分:0)

您可以监控剪贴板:ClipBoard Monitor C# 这将涵盖多个文件,仅告诉您已复制文件名或文件内容,而不是实际复制的时间。你需要做更多的事情来捕捉实际的写作。

答案 1 :(得分:0)

我相信你所缺少的词语是“钩子”,在这种情况下,这个问题/答案应该能满足你的需求:Windows XP/7 copy FILE hook

  

1)您可以挂钩WinFi函数,如CopyFile和CopyFileEx   创建一个系统范围的钩子,自己编写钩子或使用API   钩子库像madCodeHook或Deviare API钩子(我用过两者   图书馆效果很好。)

     

2)编写文件系统过滤器驱动程序。

答案 2 :(得分:0)

创建一个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变量将包含复制的文件名。