ShowWindowAsyncはすべての場合に機能しません。メモ帳、タスクマネージャー、またはビジュアルスタジオで試してみるとうまくいきます。最小化したときに復元するだけですが、Windowsエクスプローラや別の外部処理で試してみると機能しません。いずれの場合でも、GetProcessesByNameはそれらを見つけるだけで、最小化から戻ってくることはありません。あなたが実際に可能ではない何をしたいですShowWindowAsyncはすべての場合に機能しません
PInvokeFunctionsクラス
[DllImport("user32.dll")]
public static extern bool ShowWindowAsync(HandleRef hWnd, int nCmdShow);
[DllImport("user32.dll")]
public static extern bool SetForegroundWindow(IntPtr WindowHandle);
方法
public static void FocusProcess(string procName)
{
Process[] objProcesses = Process.GetProcessesByName(procName);
if (objProcesses.Length > 0)
{
IntPtr hWnd = IntPtr.Zero;
hWnd = objProcesses[0].MainWindowHandle;
PInvokeFunctions.ShowWindowAsync(new HandleRef(null, hWnd), Constants.PInvokeConstants.SW_RESTORE); // SW_RESTORE = 9
PInvokeFunctions.SetForegroundWindow(hWnd);
}
}