当前位置:  开发笔记 > 编程语言 > 正文

如何在C++中将自定义项添加到系统菜单?

如何解决《如何在C++中将自定义项添加到系统菜单?》经验,为你挑选了1个好方法。

我需要枚举所有正在运行的应用程序.特别是所有顶级窗户.对于每个窗口,我需要将自定义项添加到该窗口的系统菜单中.

我怎样才能在C++中实现这一目标?

更新.

我非常乐意为Windows,MacOS和Ubuntu提供解决方案(但是,我不确定MacOS和Ubuntu是否有'系统菜单'这样的东西).



1> efotinis..:

对于Windows,另一种获取顶级窗口的方法(除了使用回调的EnumWindows之外)是获取桌面的第一个子节点,然后检索其所有兄弟节点:

HWND wnd = GetWindow(GetDesktopWindow(), GW_CHILD);
while (wnd) {
    // handle 'wnd' here
    // ...
    wnd = GetNextWindow(wnd, GW_HWNDNEXT);
}

至于获取系统菜单,使用GetSystemMenu函数,FALSE作为第二个参数.将GetMenu在其他的答案中提到返回正常的窗口菜单.

但请注意,虽然向外部进程窗口添加自定义菜单项很容易,但响应该项的选择有点棘手.您要么必须向进程注入一些代码才能能够对窗口进行子类化,或者安装全局钩子(可能是一个WH_GETMESSAGEWH_CBT类型)来监视WM_SYSCOMMAND消息.

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有