在c#BringWindowToTop和ShowWindow DLL中不适用于所有应用程序

时间:2012-10-25 11:06:30

标签: c# showwindow

我在“BringWindowToTop”和“ShowWindow”中遇到了一个问题,这个问题在某些应用程序中出现,但不是全部。

问题是,如果我的应用程序被最小化到任务栏,并且当我逐个打开应用程序时,它们都会打开,除了Outlook。

在Outlook的情况下,我发现使用GetWindowPlacement dll,它返回x,y和amp;高度,宽度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);
    }

}

你能帮我把所有应用程序的窗口都放在最上面吗?

0 个答案:

没有答案