代码改变世界

winform中ShowInTaskbar设为false时,注册的热键失效的问题解决

2009-04-17 16:45  3b阿当  阅读(812)  评论(1编辑  收藏  举报

      最近一个项目需要实现通过热键控制界面的显示和隐藏的效果。抛开热键的问题,先来看界面的显示和隐藏,.net中通过以下两个方法实现:

Code

      

      OK,经测试没有问题。下面来考虑热键的问题。查了一下MSDN,没有在.NET类库中找到注册和销毁热键的方法,于是决定调用WIN32 API来实现。搜索后得到以下代码:

Code

        

       于是在主界面的构造函数中增加注册热键的代码
 

 

RegisterHotKey(Handle, 8002, Keys.D0);

 

       同时,覆载Form类的WndProc方法(此部分代码仍来自网上)

Code

      其中CutOverForm()方法负责切换界面的显示。
      但是,一测试,不好,当我通过热键将窗口隐藏后,无论如何也无法将其再次显示出来了。设断电,调试,发现第一次热键有效,第二次就无法触发热键了。反复测试发现当我把HideCurrentForm()中的ShowInTaskbar设为true时,则可以连续触发热键,但显然无法满足项目的需求。于是,继续搜索,发现也有人http://blog.csdn.net/Yasker/archive/2006/02/22/606294.aspx遇到了同样的问题,只要在代码中将ShowInTaskbar设为false,则热键立即失效,但找了很久也没有找到解决方案,于是,准备转向WIN32 API。在网上搜索到参考代码
 http://read.pudn.com/downloads63/sourcecode/windows/csharp/222835/%CF%D4%CA%BE%D2%FE%B2%D8%B3%CC%D0%F2/WindowsApplication1/Form1.cs__.htm

 

Code

  

      测试,测试,大喜:)
      正在我准备收工的时候,无意间看到参考代码中的一个方法中有对ShowInTaskbar的操作,而在前面的代码中其执行的是销毁热键的操作,之后接着重新注册热键。这个,难道?马上测试

Code

 

       运行,Ctrl + 0,来回切换,成功!困扰了自己好几天问题原来在这!!只是当改变ShowInTaskbar的属性为false,为何热键会失效呢?不知哪位可以帮忙解释一下?本人Form下的开发刚刚入门,实在是无从查起:(