最近找了一些资料,是讲在C#中设置快捷键运行方法或程序的
要设置快捷键必须使用user32.dll下面的两个方法。
BOOLRegisterHotKey(
HWNDhWnd,
intid,
UINTfsModifiers,
UINTvk
);
和
BOOLUnregisterHotKey(
HWNDhWnd,
intid
);
转换成C#代码,那么首先就要引用命名空间System.Runtime.InteropServices;来加载非托管类user32.dll。于是有了:
[DllImport("user32.dll",SetLastError=true)]
publicstaticexternboolRegisterHotKey(
IntPtrhWnd,//handletowindow
intid,//hotkeyidentifier
KeyModifiersfsModifiers,//key-modifieroptions
Keysvk//virtual-keycode
);
[DllImport("user32.dll",SetLastError=true)]
publicstaticexternboolUnregisterHotKey(
IntPtrhWnd,//handletowindow
intid//hotkeyidentifier
);
[Flags()]
publicenumKeyModifiers
{
None=0,
Alt=1,
Control=2,
Shift=4,
Windows=8
}
这是注册和卸载全局快捷键的方法,那么我们只需要在Form_Load的时候加上注册快捷键的语句,在FormClosing的时候卸载全局快捷键。同时,为了保证剪贴板的内容不受到其他程序调用剪贴板的干扰,在Form_Load的时候,我先将剪贴板里面的内容清空。
于是有了:
privatevoidForm1_Load(objectsender,System.EventArgse)
{
label2.AutoSize=true;
Clipboard.Clear();//先清空剪贴板防止剪贴板里面先复制了其他内容
RegisterHotKey(Handle,100,0,Keys.F10);
}
privatevoidForm1_FormClosing(objectsender,FormClosingEventArgse)
{
UnregisterHotKey(Handle,100);//卸载快捷键
}
那么我们在别的窗口,怎么让按了快捷键以后调用我的主过程ProcessHotkey()呢?
那么我们就必须重写WndProc()方法,通过监视系统消息,来调用过程:
protectedoverridevoidWndProc(refMessagem)//监视Windows消息
{
constintWM_HOTKEY=0x0312;//按快捷键
switch(m.Msg)
{
caseWM_HOTKEY:
ProcessHotkey();//调用主处理程序
break;
}
base.WndProc(refm);
}