2

我在某些应用程序中遇到“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);
    }

}

你能帮我把所有应用程序的窗口都放在首位吗?

4

0 回答 0