将自定义系统菜单项和处理程序注入到新打开的窗口中

本文关键字:新打开 窗口 注入 程序 系统 自定义 菜单项 处理 | 更新日期: 2023-09-27 18:08:59

我想做的事情:
当用户右键单击窗口的标题栏时,我想创建一个自定义菜单项(以及最小化、最大化、关闭等(。此外,我希望用户能够点击我的菜单项并触发我的代码。此外,我想对每一个新打开的窗口都这样做。例如,当用户打开一个新的记事本窗口并右键单击其标题栏时,他/她将看到:恢复、移动、最大化、最小化、Foo(我的菜单项(、关闭。一旦他们点击"Foo",我的代码就会被调用。

到目前为止我所拥有的:
我正在使用SetWinEventHook来挂接EventObjectCreate事件。我也遵循本指南插入我自己的菜单项(通过GetSystemMenu和AppendMenu(。

我的问题:
因此,现在我可以成功地将自己的菜单项注入到新创建的窗口中,但当用户单击该项时,不会发生任何事情。单击此菜单项时,如何将我的功能注册到该菜单项?

附言:我在C#中使用Pinvoke做这件事,不确定这是否重要。

将自定义系统菜单项和处理程序注入到新打开的窗口中

您必须挂接窗口的窗口进程(也称为窗口的子类化(并处理WM_SYSCOMMAND消息。如果选择的菜单项是您的自定义项,则检查wParam参数并调用函数。

你会遇到有趣的问题。例如,请参阅从C#中为本机应用程序子类和在C#中为外部窗口子类

这是可以做到的,但并不简单。

你可能也对http://www.codeproject.com/Articles/3234/Subclassing-in-NET-The-pure-NET-way.