自定义标题栏上下文菜单操作
Custom Title Bar Context Menu Actions
我想为每个 window 的标题栏上下文菜单添加自定义操作。目标是在任务视图中添加一个选项,您可以在其中将 window 移动到不同的虚拟桌面。我能够使用 C# 中的 GlobalHotKey 和 WindowsDesktop 包通过热键来做到这一点。但我想在 UI 以及类似于某些 Linux 桌面环境中进行。
我知道您通常不能像对其他上下文菜单那样对注册表执行此操作。在创建您自己的应用程序时,我知道您可以使用 GetSystemMenu
、AppendMenu
等并覆盖 WndProc
来处理它。但这显然对我的意图不起作用。
应用程序 Moo0 Window Menu Plus 达到了预期的效果,但我不知道他们是怎么做到的。
我觉得这个解决方案可能有点老套,但我仍然想知道它是如何实现的。我愿意使用任何语言来实现这一目标。
您需要注入进程,这是添加菜单项的唯一方法。
A shell hook 将在创建适当的 window 时用 HSHELL_WINDOWCREATED
通知您。然后您可以注入到进程中(使用另一种挂钩类型或 CreateRemoteThread
)。在进程中拥有 .DLL 后,您可以子类化 window 并更改系统菜单。
您需要同时创建 32 位和 64 位注入 .DLL,我建议您使用本机代码而不是 C# 编写它。
我想为每个 window 的标题栏上下文菜单添加自定义操作。目标是在任务视图中添加一个选项,您可以在其中将 window 移动到不同的虚拟桌面。我能够使用 C# 中的 GlobalHotKey 和 WindowsDesktop 包通过热键来做到这一点。但我想在 UI 以及类似于某些 Linux 桌面环境中进行。
我知道您通常不能像对其他上下文菜单那样对注册表执行此操作。在创建您自己的应用程序时,我知道您可以使用 GetSystemMenu
、AppendMenu
等并覆盖 WndProc
来处理它。但这显然对我的意图不起作用。
应用程序 Moo0 Window Menu Plus 达到了预期的效果,但我不知道他们是怎么做到的。
我觉得这个解决方案可能有点老套,但我仍然想知道它是如何实现的。我愿意使用任何语言来实现这一目标。
您需要注入进程,这是添加菜单项的唯一方法。
A shell hook 将在创建适当的 window 时用 HSHELL_WINDOWCREATED
通知您。然后您可以注入到进程中(使用另一种挂钩类型或 CreateRemoteThread
)。在进程中拥有 .DLL 后,您可以子类化 window 并更改系统菜单。
您需要同时创建 32 位和 64 位注入 .DLL,我建议您使用本机代码而不是 C# 编写它。