【问题标题】:Modifying global system menus修改全局系统菜单
【发布时间】:2009-12-22 03:16:12
【问题描述】:

在 C# 中有没有办法在所有活动窗口的所有系统菜单中全局添加一个菜单项?也许在“最大化”命令下?

【问题讨论】:

  • 如果您的设计要求您这样做,您需要重新考虑您的设计。
  • 我正在尝试编写一个程序,允许我“固定”任何窗口,使其始终位于所有其他窗口的顶部。
  • 如果用户有另一个应用程序使用与您最终使用相同的技术将窗口放在顶部,谁会赢?
  • 那么我会假设两个窗口都在顶部。一个可以移动到屏幕的左上角,第二个可以移动到屏幕的右下角,两者都位于所有其他窗口的顶部。

标签: c# hook menu


【解决方案1】:

这不能在托管代码中完成。即使在未管理的代码中,这也将非常困难。基本上你必须将代码注入每个进程,然后将项目插入本地系统菜单,然后挂钩主窗口 proc 以拦截 WM_SYSCOMMAND 消息,以便你可以使菜单项做一些事情。

您可以编写代码,将 WS_TOPMOST 样式添加到(大多数)窗口(安全许可),只需使用 FindWindow 获取窗口句柄,然后使用 SetWindowLong 更改窗口样式。

但是你不能把它的 UI 放到其他进程的系统菜单中。

【讨论】:

  • 感谢约翰的回复。所以最好的方法是编写类似 Spy++ 的东西,让你“选择”一个窗口,然后在该窗口上使用 SetWindowLong 来更改窗口样式?
  • stackoverflow.com/q/138616/103167中描述了一种无需代码注入的优雅方法
【解决方案2】:

您可以通过将 C# 中的所有逻辑写入 exe 文件来实现。您还必须在 C/C++ 中编写一些代码作为挂钩,它将菜单项中的事件发送到您的 exe 文件。你可以在这里找到一个例子https://github.com/AlexanderPro/SmartSystemMenu

【讨论】:

  • 如果您要链接到自己的项目,那么您需要在答案中披露。
猜你喜欢
  • 2012-02-05
  • 2021-02-22
  • 1970-01-01
  • 2013-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-26
  • 1970-01-01
相关资源
最近更新 更多