目前唯一可行的解决方案我是绑定不同的东西,例如:按Ctrl + B,然后调用 SendKeys.SendWait(“^ V”); 然而,这是不理想的。
一个理想的解决方案是,如果我的窗户没拦截在首位的按键,只是反应。registerhotkeyregisterhotkey
解决方案
可以通过使用SetWindowsHookEx函数利用挂钩做到这一点()。
HHOOK WINAPI调用SetWindowsHookEx(
__in INT idHook,
__in HOOKPROC lpfn,
__in HINSTANCE HMOD,
__in DWORD dwThreadId
);
基本上,你可以设置一个低级别的键盘挂钩:
_hookHandle =调用SetWindowsHookEx(
WH_KEYBOARD_LL,
KbHookProc,//你的键盘处理
(IntPtr的)0,
0); //设置系统范围的钩子。
捕捉到全系统的键盘事件。但它也可以让你做出这些键盘事件传递到其他应用程序。为了您的特定情况下,可以定义 KbHookProc 为:
私有静态INT KbHookProc(INT nCode,wParam中的IntPtr,IntPtr的lParam的)
{
如果(nCode> = 0)//这意味着我们可以截获该事件。
{
VAR hookStruct =(KbLLHookStruct)Marshal.PtrToStructure(
lParam的,
typeof运算(KbLLHookStruct));
//快速检查,如果Ctrl键是向下。
//见函数GetKeyState()DOCO有关标志的详细信息。
布尔ctrlDown =
函数GetKeyState(VK_LCONTROL)!= 0 ||
函数GetKeyState(VK_RCONTROL)!= 0;
如果(ctrlDown&安培;&安培; hookStruct.vkCode == 0x56)//按Ctrl + V
{
//你的自定义操作替换此。
Clipboard.SetText(“你好”);
}
}
//传递给其他键盘处理程序。使得按Ctrl + V通过。
返回CallNextHookEx方法(_hookHandle,nCode,wParam中,lParam的);
}
我编写了一个快速和肮脏的WinForms应用程序来说明这一点。对于完整的代码列表,请参见 。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-35347-3.html
444444444444444