day8.1: ウィンドウ情報の取得

クリックした場所にあるウィンドウが、目的のウィンドウであることをどうやって確認すればよいのか。「C# ウィンドウ位置を取得」ではうまく見つからず、「c# process position window」でそれっぽい記事How to get window’s position?が見つかった。
Process.GetProcessesByNameとWin32 APIのGetWindowRectを使えばよいらしい。あとは「C# GetWindowRect」で検索して芋づる式に情報が見つかり、ウィンドウを整列させる – 宇宙仮面の C# Programmingが特に参考になった。

設定で指定されたプロセス名(.exeを除くらしい)の上下左右を取得するためのWindowクラス(名前がアレだが問題なく動いている)を実装し、ウィンドウ関連の処理を任せることにした。

// 指定プロセスのウィンドウ位置を取得する
public RECT GetProcessRect(string name)
{
  RECT rect = new RECT();
  rect.left = -1; rect.top = -1; rect.right = -1; rect.bottom = 1;
  Process[] ps = Process.GetProcessesByName(name);
  foreach (Process p in ps)
  {
    if (IsWindowVisible(p.MainWindowHandle))
    {
      GetWindowRect(p.MainWindowHandle, ref rect);
      return rect;
    }
  }
  return rect;
}

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です