ShowInTaskbar = false与API -> RegisterHotKey()冲突

linmilove 2009-04-22 05:36:05
我有一程序要求
       注册系统热键-->调用API:RegisterHotKey()
      不显示在任务栏,按Alt+Tab键都不显示 -->this.FormBorderStyle = FormBorderStyle.FixedToolWindow;
                         this.ShowInTaskbar = false;//启用这一句热键就不能用了

但是用了:ShowInTaskbar = false 后注册的系统热键无效了,请问还有其他方法可以注册系统热键
              或 调用API让程序不显示在任务栏 且 在按下Alt+Tab 不显示程序图标
...全文
423 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
兔子-顾问 2010-07-18
  • 打赏
  • 举报
回复
为什么会这样呢?能详细说明一下就好了。
兔子-顾问 2010-07-18
  • 打赏
  • 举报
回复
原来是这样,学习了。不知道这还有区别。。
xufzu123 2009-04-23
  • 打赏
  • 举报
回复
关注+学习+up~~
boywangliang 2009-04-23
  • 打赏
  • 举报
回复
i学习
gomoku 2009-04-23
  • 打赏
  • 举报
回复
我猜测你RegisterHotKey后才设置ShowInTaskbar=false的。

改变ShowInTaskbar需要另一种风格的窗口,所以它的内部实现是重新创建窗口
也就是说Form的窗口句柄将发生改变,比如下面代码: i != j :


int i = this.Handle.ToInt32();
this.ShowInTaskbar = ! this.ShowInTaskbar;
int j = this.Handle.ToInt32();


我怀疑你用了this.Handle去登记RegisterHotKey(),结果WM_HOTKEY通知被发送到旧的窗口句柄了。

解决方法:
方法一、尝试先设置ShowInTaskbar,然后登记热键。
方法二、传入IntPtr.Zero(通知到当前线程,而不是具体窗口),然后Application.AddMessageFilter来处理通知。

111,131

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧