如何使用全局热键从任何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到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
}
检查:http://pinvoke.net/default.aspx/user32.sendinput,SendInput @ msdn您还可以使用SendInput添加双击,以自动突出显示文本。请记住,你不应该操纵剪贴板向应用程序发送信息。