我正在使用RegisterHotKey来定义一个系统范围的热键,当按下该热键时,它将自动将任何突出显示的文本复制到 Microsoft Windows 中的剪贴板。
只需按Ctrl+即可将文本复制到剪贴板,C因为这似乎是我能找到的几乎所有 Windows 应用程序中唯一可用的东西之一。通过调用keybd_event来按下键本身。
全局热键和复制到剪贴板实际上在任何情况下都非常有效,除非我将热键指定为包含Ctrl. 这Ctrl似乎干扰了复制到剪贴板或类似的东西。
示例:如果我将热键设置为F11,一切都会正确启动并复制文本。而Ctrl++Alt将D简单地拒绝复制突出显示的文本。
我试着玩弄 BlockInput 看看这是否会阻止任何其他事情对我的击键产生影响。
我还尝试将 KEYEVENTF_KEYUP 发送到Ctrl, Alt,Shift希望它将我的所有键设置为 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
}