我在某些应用程序中遇到“BringWindowToTop”和“ShowWindow”问题,但不是全部。
问题是,如果我的应用程序被最小化到任务栏,并且当我一个一个打开应用程序时,除了 Outlook 之外,它们都打开了。
在 Outlook 的情况下,我发现使用 GetWindowPlacement dll,它返回它的 x 、 y 和 height 、 width 0 值。
在 Outlook 中,如果我的应用程序处于恢复模式/最大化模式,则 process.MainWindowHandle 具有不同的值,而处于最小化模式时 MainWindowHandle 具有不同的值。
下面是代码:
foreach (var process in System.Diagnostics.Process.GetProcessesByName("outlook"))
{
ForceForegroundWindow1(process.MainWindowHandle, 2);
}
private static void ForceForegroundWindow1(IntPtr hWnd, int Status)
{
uint foreThread = GetWindowThreadProcessId(GetForegroundWindow(), IntPtr.Zero);
uint appThread = GetCurrentThreadId();
int SW_SHOW = 5;
if (Status == 0)
SW_SHOW = 3;
else if (Status == 2)
SW_SHOW = 9;
//SW_SHOW = 1;
const int SW_RESTORE = 9;
if (foreThread != appThread)
{
AttachThreadInput(foreThread, appThread, true);
BringWindowToTop(hWnd);
ShowWindow(hWnd, SW_SHOW);
// ShowWindowAsync(hWnd, SW_RESTORE);
AttachThreadInput(foreThread, appThread, false);
}
else
{
BringWindowToTop(hWnd);
ShowWindow(hWnd, SW_SHOW);
// ShowWindowAsync(hWnd, SW_RESTORE);
}
}
你能帮我把所有应用程序的窗口都放在首位吗?