C# 系统热键注册实现代码
程序员文章站
2023-11-22 11:08:58
先引用using system.runtime.interopservices; 的命名空间, 然后在合适的位置加上如下代码就ok。。注意:form1_load和form1...
先引用using system.runtime.interopservices; 的命名空间,
然后在合适的位置加上如下代码就ok。。注意:form1_load和form1_formclosed不能直接copy哦~
[dllimport("user32")]
public static extern bool registerhotkey(intptr hwnd,int id,uint control,keys vk );
//注册热键的api
[dllimport("user32")]
public static extern bool unregisterhotkey(intptr hwnd, int id);
private void form1_load(object sender, eventargs e)
{
//注册热键(窗体句柄,热键id,辅助键,实键)
registerhotkey(this.handle, 888, 2, keys.a);
}
private void form1_formclosed(object sender, formclosedeventargs e)
{
//注消热键(句柄,热键id)
unregisterhotkey(this.handle, 888);
}
protected override void wndproc(ref message m)
{
switch (m.msg)
{
case 0x0312: //这个是window消息定义的 注册的热键消息
if (m.wparam.tostring().equals("888")) //如果是我们注册的那个热键
messagebox.show("你按了ctrl+a");
break;
}
base.wndproc(ref m);
}
辅助键说明:
none = 0,
alt = 1,
crtl= 2,
shift = 4,
windows = 8
如果有多个辅助键则,例如 alt+crtl是3 直接相加就可以了
然后在合适的位置加上如下代码就ok。。注意:form1_load和form1_formclosed不能直接copy哦~
复制代码 代码如下:
[dllimport("user32")]
public static extern bool registerhotkey(intptr hwnd,int id,uint control,keys vk );
//注册热键的api
[dllimport("user32")]
public static extern bool unregisterhotkey(intptr hwnd, int id);
private void form1_load(object sender, eventargs e)
{
//注册热键(窗体句柄,热键id,辅助键,实键)
registerhotkey(this.handle, 888, 2, keys.a);
}
private void form1_formclosed(object sender, formclosedeventargs e)
{
//注消热键(句柄,热键id)
unregisterhotkey(this.handle, 888);
}
protected override void wndproc(ref message m)
{
switch (m.msg)
{
case 0x0312: //这个是window消息定义的 注册的热键消息
if (m.wparam.tostring().equals("888")) //如果是我们注册的那个热键
messagebox.show("你按了ctrl+a");
break;
}
base.wndproc(ref m);
}
辅助键说明:
none = 0,
alt = 1,
crtl= 2,
shift = 4,
windows = 8
如果有多个辅助键则,例如 alt+crtl是3 直接相加就可以了