我需要枚举所有正在运行的应用程序。特别是所有顶部窗户。对于每个窗口,我需要将自定义项目添加到该窗口的系统菜单中。
我怎样才能在 C++ 中实现这一点?
Update.
我非常乐意为 Windows、MacOS 和 Ubuntu 提供解决方案(不过,我不确定 MacOS 和 Ubuntu 是否有“系统菜单”之类的东西)。
对于 Windows,获取顶级窗口的另一种方法(除了 EnumWindows,它使用回调)是获取桌面的第一个子窗口,然后检索其所有同级窗口:
HWND wnd = GetWindow(GetDesktopWindow(), GW_CHILD);
while (wnd) {
// handle 'wnd' here
// ...
wnd = GetNextWindow(wnd, GW_HWNDNEXT);
}
至于获得system菜单,使用GetSystemMenu函数,第二个参数为 FALSE。这GetMenu其他答案中提到的返回normal窗口菜单。
但请注意,虽然将自定义菜单项添加到外部进程的窗口很容易,但响应该项目的选择却有点棘手。您要么必须向进程注入一些代码才能对窗口进行子类化,要么安装一个全局挂钩(可能是一个WH_GETMESSAGE
or WH_CBT
类型)来监控WM_SYSCOMMAND
消息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)