【问题标题】:Why doesn't the tray icon context menu work for my RemoteApp?为什么托盘图标上下文菜单不适用于我的 RemoteApp?
【发布时间】:2011-07-06 16:17:30
【问题描述】:

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

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

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

【问题讨论】:

    标签: windows contextmenu system-tray trayicon remoteapp


    【解决方案1】:

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

    一个潜在的解决方法是使用WM_RBUTTONUP 触发上下文菜单,但这会破坏键盘的可访问性,所以我不推荐它。

    我确定的解决方法如下:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      • 1970-01-01
      • 2015-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多