0

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

只需按Ctrl+即可将文本复制到剪贴板,C因为这似乎是我能找到的几乎所有 Windows 应用程序中唯一可用的东西之一。通过调用keybd_event来按下键本身。

全局热键和复制到剪贴板实际上在任何情况下都非常有效,除非我将热键指定为包含Ctrl. 这Ctrl似乎干扰了复制到剪贴板或类似的东西。

示例:如果我将热键设置为F11,一切都会正确启动并复制文本。而Ctrl++AltD简单地拒绝复制突出显示的文本。

我试着玩弄 BlockInput 看看这是否会阻止任何其他事情对我的击键产生影响。

我还尝试将 KEYEVENTF_KEYUP 发送到Ctrl, AltShift希望它将我的所有键设置为 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
}
4

1 回答 1

1

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

于 2013-01-15T21:10:05.457 回答