打开另一个应用程序的系统菜单

我有一个像我正在开发的应用程序的WPF TaskBar,我希望能够打开我右键单击的应用程序的系统菜单(在我的自定义任务栏中),保留应用程序可能创建的任何自定义菜单(即谷歌Chrome)。 我有以下代码,适用于我之前制作的无边框窗口应用程序,但它似乎不起作用,我想知道为什么? 我需要做些什么才能让它发挥作用?

public static void ShowContextMenu(IntPtr hWnd) { SetForegroundWindow(hWnd); IntPtr wMenu = GetSystemMenu(hWnd, false); // Display the menu uint command = TrackPopupMenuEx(wMenu, TPM.LEFTBUTTON | TPM.RETURNCMD, 0, 0, hWnd, IntPtr.Zero); if (command == 0) return; PostMessage(hWnd, WM.SYSCOMMAND, new IntPtr(command), IntPtr.Zero); } 

提示:TrackPopupMenuEx(…)似乎立即返回值0,而不是等待响应…

将TrackPopupMenuEx提供给菜单的所有者窗口句柄似乎存在问题…相反,我使用了我的wpf窗口的句柄,然后在发布消息时,我使用了Menu的所有者……对我来说似乎有点奇怪但是有用!

  public static void ShowContextMenu(IntPtr hAppWnd, Window taskBar, System.Windows.Point pt) { WindowInteropHelper helper = new WindowInteropHelper(taskBar); IntPtr callingTaskBarWindow = helper.Handle; IntPtr wMenu = GetSystemMenu(hAppWnd, false); // Display the menu uint command = TrackPopupMenuEx(wMenu, TPM.LEFTBUTTON | TPM.RETURNCMD, (int) pt.X, (int) pt.Y, callingTaskBarWindow, IntPtr.Zero); if (command == 0) return; PostMessage(hAppWnd, WM.SYSCOMMAND, new IntPtr(command), IntPtr.Zero); }