Open1

C#でProcessのハンドルを取得するときはHandleではなくMainWindowHandleを使う

Lamron🖇Lamron🖇

C#で外部Processのハンドルを取得する際、権限を持ってないとHandleを取得しようとするとSystem.ComponentModel.Win32Exception: Access is deniedといったエラーが起きます。
しかしMainWindowHandleは特に権限がなくても取得できます。
例えばプロセスIDだけがわかってる状態でそのProcessが最小化状態か調べたい場合以下のようにします。

[DllImport("user32.dll")]
public static extern bool IsIconic(IntPtr handle);

private void Func(){
    IntPtr handle = Process.GetProcessById(pid).MainWindowHandle;//Error occurs for "Handle", not "MainWindowHandle"
    if (IsIconic(handle)) //実行したい処理;
}