C#热键实现方式
在MDI的子窗体中需要为按钮注册热键,我通过重载WndProc方式使用系统的hotkey来实现的,当程序打开时热键正常,但是在我使用WIN7的显示桌面按钮后,程序已经最小化了,但热键还存在,怎么才能在这种状态下屏蔽热键? --------------------编程问答-------------------- 最小化时,UnregisterHotKey 注销热键 --------------------编程问答-------------------- 已经写了,但是没有触发此事件const int WM_HOTKEY = 0x0312;
const int WM_SYSCOMMAND = 0x112;
const int SC_CLOSE = 0xF060;
const int SC_MINIMIZE = 0xF020;
const int SC_MAXIMIZE = 0xF030;
//按快捷键
switch (m.Msg)
{
case WM_SYSCOMMAND:
switch (m.WParam.ToInt32())
{
case SC_MINIMIZE:
unregisterHotKey();
break;
case SC_MAXIMIZE:
// btnPanelChange();
break;
case SC_CLOSE:
// unregisterHotKey();
break;
}
break;
} --------------------编程问答-------------------- 使用RegisterHotKey本来就是为了窗口不在焦点状态时也能响应热键
如果你要只有在焦点状态下才响应,那直接使用窗体的键盘事件就好了
--------------------编程问答-------------------- 我觉得
还是不要反复的RegisterHotKey,UnregisterHotKey
你可以在触发热键后
判断窗口的状态,
如果处于焦点,就执行相关代码,
如果最小化了,那就不执行了
--------------------编程问答-------------------- 客户要求的热键是F1到F12,因为F12是.net屏蔽的键,所以现在是用F1到F11,普通键盘事件不好实现。控件太多,几百个控件,我不可能轮询每个控件去写它们的onkeypress事件 --------------------编程问答-------------------- 4楼说的不行吧,我这本来就是2个程序2个进程来回切换的,两个程序中都有热键,会冲突的吧 --------------------编程问答--------------------
肯定会冲突啊
我也正想问你
F1---F12这么简单的全局热键
如果被别的程序占用了,怎么办呢?
还是使用IMessageFilter吧
RegisterHotKey真不合适你的需求
--------------------编程问答-------------------- 能不能提供个例子,谢谢了
补充:.NET技术 , C#