如何使用全局热键从任何windows应用程序成功复制高亮显示的文本?

本文关键字:高亮 复制 成功 显示 文本 应用程序 windows 全局 何使用 任何 | 更新日期: 2023-09-27 17:53:18

我使用RegisterHotKey来定义一个系统范围的热键,当按下时,将自动复制任何高亮显示的文本到Microsoft Windows的剪贴板。

文本被复制到剪贴板,只需按Ctrl + C,因为这似乎是唯一的事情,我能发现,在几乎任何Windows应用程序的工作之一。键本身是通过调用keybd_event被按下的。

全局热键,复制到剪贴板,实际上在任何情况下都很有效,除非我将热键指定为包含Ctrl的东西。这个Ctrl似乎干扰了复制到剪贴板或沿着这些行的其他东西。

示例:如果我将热键设置为F11,一切都会正常启动并复制文本。而Ctrl + Alt + D将直接拒绝复制高亮显示的文本。

我试着摆弄一下BlockInput,看看这是否会防止任何额外的东西对我的击键产生影响。

我也试过发送KEYEVENTF_KEYUP到CtrlAltShift,希望它能将我所有的键设置为KeyUp状态。下面是一个例子:

// This will send ctrl + C to the active window to copy something to the clipboard.
public static void SendCtrlC(IntPtr hWnd)
{
    const byte Control = (byte)VKCode.Control;
    const byte LeftControl = (byte)VKCode.Lcontrol;
    const byte LeftAlt = (byte)VKCode.Lmenu;
    const byte LeftShift = (byte)VKCode.Lshift;
    const byte RightControl = (byte)VKCode.Rcontrol;
    const byte RightAlt = (byte)VKCode.Rmenu;
    const byte RightShift = (byte)VKCode.Rshift;
    const byte KeyC = (byte)VKCode.KeyC;
    const int KeyUp = (int)KeyEvent.KeyEventFKeyUp;
    const int KeyDown = (int)KeyEvent.KeyEventFKeyDown;
    KeyBdEvent(LeftControl, 0, KeyUp, 0); // Left Control Up
    KeyBdEvent(LeftAlt, 0, KeyUp, 0); // Left Alt Up
    KeyBdEvent(LeftShift, 0, KeyUp, 0); // Left Shift Up
    KeyBdEvent(RightControl, 0, KeyUp, 0); // Left Control Up
    KeyBdEvent(RightAlt, 0, KeyUp, 0); // Left Alt Up
    KeyBdEvent(RightShift, 0, KeyUp, 0); // Left Shift Up
    Window.SetForegroundWindow(hWnd);
    KeyBdEvent(Control, 0, KeyDown, 0); // Left Control Down
    KeyBdEvent(KeyC, 0, KeyDown, 0); // Key C Down
    KeyBdEvent(KeyC, 0, KeyUp, 0); // Key C Up
    KeyBdEvent(Control, 0, KeyUp, 0); // Left Control Up
}

如何使用全局热键从任何windows应用程序成功复制高亮显示的文本?

检查:http://pinvoke.net/default.aspx/user32.sendinput,SendInput @ msdn您还可以使用SendInput添加双击,以自动突出显示文本。请记住,你不应该操纵剪贴板向应用程序发送信息。