首页 > 代码库 > 全局热键与隐藏窗口启动程序矛盾的解决记录
全局热键与隐藏窗口启动程序矛盾的解决记录
需要实现的需求如下:
程序启动分2种:正常带窗口(手动启动);静默不带窗口直接显示托盘(开机启动;自动更新后启动)
遇到的难点及解决:
由于程序用用到全局热键截屏(由RegisterHotKey...实现),发现最小化托盘后就有问题了。最后发现去掉"this.ShowInTaskbar=false;"就可以了。至于原因没有深究。但要是没有这句的话,开机带参数静默启动时会出现闪屏,而且更严重的是,自动更新是通过后台一个服务控制的,所以自动更新后启动前台程序需要session0穿透。通过这个方式启动要不显示界面,必须需要"this.ShowInTaskbar=false;",一个矛盾点就这样产生了,所以必须搞明白"this.ShowInTaskbar=false“这句到底做了什么。最后终于明白:原来是ShowInTaskbar值改变后程序的句柄会改变。之前注册热键的句柄就找不到了。所以就好办了,加上在静默启动中保留"this.ShowInTaskbar=false;",然后每次改变ShowInTaskbar值后都重新取消热键再注销热键。
最后将所查相关资料遇到不错的文章留下来.
http://ly4cn.cnblogs.com/archive/2006/03/16/351205.html?Pending=true#Post
http://smalldust.cnblogs.com/archive/2006/03/29/361807.html
http://topic.csdn.net/u/20090422/17/87f283c1-eb65-4817-9988-b7f543f9217c.html
http://topic.csdn.net/u/20090616/09/6ffbba46-e1a3-4ba0-aef1-355e6ee3cc5b.html