【问题标题】:How to open the context menu of any window?如何打开任何窗口的上下文菜单?
【发布时间】:2015-04-17 13:06:31
【问题描述】:

如何打开窗口的上下文菜单(当您右键单击窗口的标题栏时出现的正常 Windows 上下文)。

我尝试过的事情(点击按钮)

ReleaseCapture();
SendMessage(this.Handle, WM_NCRBUTTONDOWN, 0, 0);
SendMessage(this.Handle, WM_RBUTTONUP, 0, 0);
SendMessage(this.Handle, WM_CONTEXTMENU, 0, 0);

还有这个:

ReleaseCapture();
SendMessage(this.Handle, WM_NCRBUTTONDOWN, HT_CAPTION, 0);
SendMessage(this.Handle, WM_RBUTTONUP, HT_CAPTION, 0);
SendMessage(this.Handle, WM_CONTEXTMENU, HT_CAPTION, 0);

【问题讨论】:

  • 你想在哪个窗口打开上下文菜单?它始终是您的还是在其他流程中?另外,如果它是您自己的窗口,您是否真的定义了一个可以打开的上下文菜单?如果您要打开上下文菜单的那个控件没有,则无法打开。
  • GetSystemMenu -> TrackPopupMenu 或许
  • 将焦点设置到窗口并发送 ALT+Space 给它。使用 Winforms SendKeys.Send("%")
  • @Alex 任何进程,我不想定义自定义上下文菜单,我想要右键单击标题栏时通常出现的默认系统菜单。
  • @Ralf 有趣的解决方案我现在试试

标签: c# contextmenu sendmessage


【解决方案1】:

要在窗口中打开系统上下文菜单,您可以按 Alt+Space。因此,在您的情况下,您可以将这些键发送到该窗口,该窗口应该会为您打开上下文菜单。

您对SendMessage 所做的部分实际上只发送一个通知,指定模拟右键单击的窗口。但鼠标在哪里仍然很重要。

同样重要:如果您使用“SendKeys.Send”(适用于 windows 窗体),这只会影响当前处于活动状态的窗口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 2011-11-14
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多