当前位置:编程学习 > C#/ASP.NET >>

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个进程来回切换的,两个程序中都有热键,会冲突的吧 --------------------编程问答--------------------
引用 6 楼  的回复:
4楼说的不行吧,我这本来就是2个程序2个进程来回切换的,两个程序中都有热键,会冲突的吧

肯定会冲突啊
我也正想问你
F1---F12这么简单的全局热键
如果被别的程序占用了,怎么办呢?
还是使用IMessageFilter吧
RegisterHotKey真不合适你的需求


--------------------编程问答-------------------- 能不能提供个例子,谢谢了 
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,