我有一个应用程序,它使用Shell_NotifyIcon
在通知区域(也就是“系统托盘”)中添加一个图标。该图标具有包含各种重要命令的上下文菜单。当应用程序在本地系统上运行时,上下文菜单工作正常。但是,当应用程序作为终端服务RemoteApp运行时,右键单击该图标不会显示上下文菜单。用于打开上下文菜单的各种基于键盘的方法也不起作用。
双击图标仍然按预期运行,所以我知道它并没有完全坏掉。不过,我们还需要上下文菜单。有人知道可能有什么问题吗?
编辑:还有一条信息:如果我按Ctrl + Alt + End打开Windows安全屏幕(允许您注销,锁定会话等),然后关闭屏幕,上下文菜单开始工作。
答案 0 :(得分:1)
似乎发生这种情况是因为应用程序在RemoteApp案例中没有收到WM_CONTEXTMENU
通知。通常的WM_RBUTTONDOWN
和WM_RBUTTONUP
通知会到达,但这就是全部。奇怪的是,如果您尝试使用键盘激活上下文菜单,即使没有涉及鼠标,您也会收到WM_RBUTTONDOWN
和WM_RBUTTONUP
。按Ctrl + Alt + End可解决此问题;系统开始发送正常的WM_CONTEXTMENU
通知。我的猜测是,这是远程桌面客户端进程中的一个错误。
一个可能的解决方法是使用WM_RBUTTONUP
触发上下文菜单,但这会破坏键盘的可访问性,所以我不推荐它。
我确定的解决方法如下:
WM_RBUTTONUP
通知时,请设置一个具有短暂超时(50-100ms)的计时器。WM_CONTEXTMENU
通知时,请取消计时器并显示上下文菜单。这应该适用于本地使用和RemoteApp使用。步骤1中的超时值需要足够长,以便在WM_CONTEXTMENU进入之前不会过期,但不会再过期。