「BringWindowToTop」と「ShowWindow」で問題に直面しています。これは一部のアプリケーションで発生していますが、すべてではありません。
問題は、アプリケーションがタスク バーに最小化されている場合、アプリケーションを 1 つずつ開くと、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);
}
}
すべてのアプリケーションでウィンドウを最前面に表示するのを手伝ってもらえますか?