1

我有一个应用程序,它使用Shell_NotifyIcon. 该图标有一个包含各种重要命令的上下文菜单。当应用程序在本地系统上运行时,上下文菜单可以正常工作。但是,当应用程序作为终端服务RemoteApp运行时,右键单击该图标不会显示上下文菜单。用于打开上下文菜单的各种基于键盘的方法也不起作用。

双击图标仍然按预期运行,所以我知道它并没有完全损坏。不过,我们需要上下文菜单也能正常工作。有人知道可能出了什么问题吗?

编辑:还有一条信息:如果我按 Ctrl+Alt+End 打开 Windows 安全屏幕(让您注销、锁定会话等),然后关闭该屏幕,上下文菜单开始工作。

4

1 回答 1

1

出现这种情况似乎是因为应用程序WM_CONTEXTMENU在 RemoteApp 案例中没有收到通知。通常WM_RBUTTONDOWNWM_RBUTTONUP通知到达,但仅此而已。奇怪的是,如果您尝试使用键盘激活上下文菜单,您也会收到WM_RBUTTONDOWNand WM_RBUTTONUP,即使没有使用鼠标。按 Ctrl+Alt+End 似乎可以解决此问题;系统开始发送正常WM_CONTEXTMENU通知。我的猜测是这是远程桌面客户端进程中的一个错误。

一种可能的解决方法是使用 触发上下文菜单WM_RBUTTONUP,但这会破坏键盘的可访问性,因此我不推荐它。

我确定的解决方法如下:

  1. 当您看到WM_RBUTTONUP通知时,请设置一个短超时(50-100 毫秒)的计时器。
  2. 当您看到WM_CONTEXTMENU通知时,取消计时器并显示上下文菜单。
  3. 当计时器触发时,取消计时器并显示上下文菜单。

这应该适用于本地使用和 RemoteApp 使用。第 1 步中的超时值需要足够长,以便在 WM_CONTEXTMENU 进来之前它不会过期,但不会再过期。

于 2011-03-02T20:38:24.440 回答