是否可以全局拦截Windows上的粘贴事件并根据目标进程进行阻塞,并使用可在C#WinForms中构建任何CPU构建的钩子?
我想过在GetClipboardData中放一个钩子或者等待WM_PASTE消息。
我的第一次尝试是SetWindowsHookEx,但另一种看起来让我气馁。
.NET Framework不支持全局挂钩 除WH_KEYBOARD_LL低级别挂钩和WH_MOUSE_LL低级别挂钩外,您无法在Microsoft .NET Framework中实现全局挂钩。要安装全局钩子,钩子必须具有本机DLL导出,以将自身注入另一个需要有效,一致的函数调用的进程中。此行为需要DLL导出。 .NET Framework不支持DLL导出。托管代码没有函数指针的一致值的概念,因为这些函数指针是动态构建的代理。
答案 0 :(得分:0)
没有理想的解决方案来检测粘贴事件。就像RbMm所说的那样,仅当剪贴板中的内容更改时,才会发送WM_CLIPBOARDUPDATE。 (复制或剪切)。 WM_DESTROYCLIPBOARD是在粘贴操作期间发送的,但前提是剪贴板中的内容是使用剪切操作添加的。
但是您可以通过实现文件系统过滤器驱动程序来实现。