如何打开任何窗口的上下文菜单?

Posted

技术标签:

【中文标题】如何打开任何窗口的上下文菜单?【英文标题】: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 有趣的解决方案我现在试试 【参考方案1】:

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

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

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

【讨论】:

以上是关于如何打开任何窗口的上下文菜单?的主要内容,如果未能解决你的问题,请参考以下文章

C# - 如何使用上下文菜单正确触发应用程序打开

如何禁用 WebView 的上下文菜单?

C#:如何打开选择了多个文件的 Windows 资源管理器窗口

使用QWebEngine在同一窗口中打开任何链接(甚至_blank)

如何使用 C 或 C++ 将选项添加到 Windows 资源管理器上下文菜单?

右键单击visjs中的节点(contextmenu)打开扩展弹出窗口(html列表)