gpt4 book ai didi

c++ - 从另一个窗口显示系统菜单

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:02:13 26 4
gpt4 key购买 nike

我现在正在从事的项目本质上是 Ultramon(多任务栏程序)的开源版本。因此,可以将应用程序想象成 Windows 任务栏。每个窗口的按钮等。这是使用 WinAPI 在 C/C++ 中编码的

我刚刚开始做,并且有一些功能下降了。但是,我一直无法让系统菜单(例如,当您右键单击任务栏“按钮”时获得的菜单)显示我希望它们显示的时间和位置。

我正在尝试使用:

HMENU menu = GetSystemMenu(item, false); 
SetForegroundWindow(hWnd);
TrackPopupMenu(menu, TPM_LEFTALIGN | TPM_BOTTOMALIGN, 0, 0, 0, hWnd, NULL);
PostMessage(hWnd, WM_NULL, 0, 0);

item 是我想要菜单的 HWND,hWnd 是我想要菜单显示的按钮/项目的 HWND。 (它现在显示在 0、0,在我的主显示器的左上角)。

对于自定义的系统菜单,此代码每次都能完美运行。例如:它不是“恢复”、“最大化”等标准菜单,它在菜单项中添加了一些。这些菜单将始终显示在我想要的位置。

但是,默认的基本系统菜单(例如只有最大化、恢复、关闭等的菜单)只会在我第一次使用它们时显示。之后他们拒绝露面。除非我重新启动计算机,然后再次运行它,此时它们才能完美运行。

注意:SetForegroundWindow(hWnd);PostMessage(hWnd, WM_NULL, 0, 0); 在那里,因为我在某处读到系统菜单只能工作第一次,除非我做了把它带到前台的技巧,但它仍然无法正常工作。

那么有人知道如何让它正常工作吗?或者为什么它只在我重新启动计算机后第一次工作?


刚刚测试了一些东西,如果我关闭窗口(例如退出程序)并重新打开它,它还会再次显示窗口的系统菜单。但是再一次,它只会显示一次然后停止工作。

最佳答案

这可能是 hacky,但您是否尝试过设置窗口焦点,然后通过类似 SendInput 的方式发出 Alt+Space?

关于c++ - 从另一个窗口显示系统菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3073797/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com