繁体   English   中英

发送粘贴消息到活动窗口的焦点控件

[英]Sending paste message to active window's focused control

我想拦截一个热键(特别是CTRL V ),它将以某种方式与我的应用程序进行交互。 我可以使用RegisterHotKey方法全局注册热键。 当我按CTRL V我希望焦点WM_PASTE窗口/控件也接收WM_PASTE消息。 我尝试通过SendMessage将其发送,但似乎没有用。 最后,我最终取消了注册热键,将^v发送到当前窗口,然后重新注册了热键。

private static void Hook_KeyPressed(object sender, KeyPressedEventArgs e)
{
    _hook.KeyPressed -= Hook_KeyPressed;
    _hook.Dispose();
    SendKeys.Send("^v");
    _hook = new KeyboardHook();
    _hook.RegisterHotKey(global::ClipMaster.ModifierKeys.Control, Keys.V);
    _hook.KeyPressed += Hook_KeyPressed;
}

这可以解决问题,但是会阻塞鼠标(和窗口)约半秒钟。 我也担心它不能在某些应用程序中使用,尽管我不知道我能举什么例子。

我不确定您要使用该钩子实现什么目标,因为无法从代码示例中理解它。

假设您出于审核原因(或监视排序)而这样做,建议您查看WM_HOTKEY消息的返回值。 它可以“说”该消息未处理,因此允许其他逻辑(例如,其他挂钩)对Ctrl-V进行进一步处理。 另外,我建议使用比已知时间问题的SendKeys类更多的方法重新发送Ctrl-V。 您是否考虑过发布一条消息?

通过使用较低级别的按键进行挂钩,我还找到了另一种挂钩方法

让我知道是否有帮助。

暂无
暂无

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

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