任务是:我需要能够从我的应用程序中显示弹出窗口,但这样做不应该与用户在Skype中输入内容,玩游戏等进行交互。如果应用程序的窗口最小化,应该打开它。 我有我的主窗口的实例。此实例包含将显示弹出窗口的代码。事情是我不能使用这样的东西:
window.ShowActivated = false;
只是因为这个接缝仅在首次显示窗口时才起作用(不是 - 当我需要调用弹出窗口时应用程序已经运行)。 现在另一种方法是使用win api。
[DllImport("user32.dll")]
static extern IntPtr GetActiveWindow();
[DllImport("USER32.DLL")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
var currentForegroundWindow = GetActiveWindow();
window.Show();
SetForegroundWindow(currentForegroundWindow);
我有什么顾虑 - 如果用户正在玩游戏或性能较低的PC,我可以打断他的行为,他实际上可以看到我试图显示的窗口(这很烦人)。所以我尝试了这个:
[DllImport("user32.dll", SetLastError=true)]
static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, SetWindowPosFlags uFlags);
SetWindowPos(window.Handle, Bottom, 0, 0, 0, 0, NOREDRAW | NOACTIVATE | NOMOVE);
现在这种接缝非常理想。我应该显示窗口,我应该在底部显示它。但是 - 它根本就没有做到这一点。我做错了吗?