繁体   English   中英

检测整个系统何时发生粘贴事件

[英]Detect when paste event ocured in whole system

我需要检测何时将某些东西粘贴到整个系统中。 例如在记事本或单词中,不仅在C#应用程序中。 我发现的示例仅描述了一些WinForms应用程序。

当我能够检测到该事件时,我想修改粘贴的值。

谢谢

为了实现您的要求,您必须将应用程序注入系统上运行的所有其他窗口中。 该过程称为“挂钩”。

摘录自“ 如何在Visual C#.NET中设置Windows挂钩”

.NET Framework不支持全局挂钩

除了WH_KEYBOARD_LL低级挂钩和WH_MOUSE_LL低级挂钩,您无法在Microsoft .NET Framework中实现全局挂钩。 若要安装全局挂钩,挂钩必须具有本机DLL导出,才能将其自身插入另一个需要有效,一致的函数才能调用的进程中。 此行为需要DLL导出。 .NET Framework不支持DLL导出。 托管代码没有函数指针的一致值的概念,因为这些函数指针是动态生成的代理。 在安装挂钩的线程上调用了低级挂钩过程。 低级挂钩不需要在DLL中实现挂钩过程。

什么是挂钩

挂钩是系统消息处理机制中的一点,应用程序可以在该钩子上安装子例程,以监视系统中的消息流量并在消息到达目标窗口过程之前处理某些类型的消息。

您应该挂接到WM_PASTE系统事件。 通过注册WindowProc回调函数来实现此目的

WM_PASTE消息https://msdn.microsoft.com/zh-cn/library/windows/desktop/ms649028%28v=vs.85%29.aspx

WindowProc回调函数https://msdn.microsoft.com/zh-cn/library/windows/desktop/ms633573%28v=vs.85%29.aspx

这应该工作

protected override void WndProc(ref Message m)
{
    switch (m.Msg)
    {
        // WM_PASTE
        case (0x0302):
            // You can interrupt here, interept or pass by. Do what You need
            MessageBox.Show("PASTE");
            break;
    }

    base.WndProc(ref m);
}

如果这对您有用,请回复

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM