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

时间:2010-06-19 00:11:02

标签: c++ winapi menu

我现在正在开发的项目本质上是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);

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

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

但是,默认的基本系统菜单(例如只有最大化,恢复,关闭等的菜单)将仅在我第一次使用时显示。之后他们拒绝出现。除非我重新启动计算机,否则再次运行它,此时它们可以正常工作。

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

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


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

1 个答案:

答案 0 :(得分:0)

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

相关问题