我需要检测一些粘贴在整个系统中的东西。例如,在记事本或单词不仅在C#应用程序中。我找到的示例仅描述了一些WinForms应用程序。
当我能够检测到该事件时,我想修改粘贴值。
由于
答案 0 :(得分:3)
要实现您的要求,您必须在系统上运行的所有其他窗口中注入您的应用程序。该过程称为Hook。
摘自How to set a Windows hook in Visual C# .NET
.NET Framework不支持全局挂钩
除了WH_KEYBOARD_LL低级别挂钩和WH_MOUSE_LL低级别挂钩之外,您无法在Microsoft .NET Framework中实现全局挂钩。要安装全局钩子,钩子必须具有本机DLL导出,以将自身注入另一个需要有效,一致的函数调用的进程中。此行为需要DLL导出。 .NET Framework不支持DLL导出。托管代码没有函数指针的一致值的概念,因为这些函数指针是动态构建的代理。 在安装钩子的线程上调用低级钩子过程。低级挂钩不要求在DLL中实现挂钩过程。
什么是Hooks:
挂钩是系统消息处理机制中的一个点,应用程序可以在其中安装子例程来监视系统中的消息流量,并在它们到达目标窗口过程之前处理某些类型的消息。
答案 1 :(得分:1)
您应该挂钩WM_PASTE系统事件。通过注册WindowProc回调函数
来实现这一点WM_PASTE消息https://msdn.microsoft.com/en-us/library/windows/desktop/ms649028%28v=vs.85%29.aspx
WindowProc回调函数https://msdn.microsoft.com/en-us/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);
}
如果这对您有用,请回复