【C#メモ】WindowsAPI:FindWindow関数

このAPIは指定文字列とウィンドウクラス名とウィンドウタイトルが一致するウィンドウの
ハンドルを取得する際に使用します。
外部アプリケーションのウィンドウを操作する時や重複起動のチェック等に使えます。

トップレベルのウィンドウのみ対象となるため、子ウィンドウのハンドルを取得したい場合は
FindWindowExを使う必要があるようです。

概要
HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName)
機能 ウィンドウクラス名(RegisterClass又はRegisterClassExで指定した名前)と
ウィンドウタイトルが一致するウィンドウハンドルを取得
引数 lpClassName ウィンドウクラス名
NULLを指定すると全ウィンドウクラスを対象
LPCTSTR
(const char*)
lpWindowName ウィンドウタイトル
NULLを指定すると全ウィンドウタイトルを対象
LPCTSTR
(const char*)
戻り値 ウィンドウハンドル
見つからなかった場合はNULL
HWND
(unsigned long)
使用例:ウィンドウクラス名からウィンドウハンドルを取得
[System.Runtime.InteropServices.DllImport("user32.dll",
                CharSet = System.Runtime.InteropServices.CharSet.Auto)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[System.Runtime.InteropServices.DllImport("user32.dll",
                CharSet = System.Runtime.InteropServices.CharSet.Auto)]
static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int cch);

void Sumple()
{
    //メモ帳のウィンドウを探す
    IntPtr hWnd = FindWindow("Notepad", null);
    if (hWnd != null)
    {
        //ウィンドウタイトルを取得
        StringBuilder title = new StringBuilder(256);
        int titleLen = GetWindowText(hWnd, title, 256);

        //出力
        Console.WriteLine(title);
    }
}

[出力結果]

無題 - メモ帳
使用例:ウィンドウタイトルからウィンドウハンドルを取得
[System.Runtime.InteropServices.DllImport("user32.dll",
                CharSet = System.Runtime.InteropServices.CharSet.Auto)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[System.Runtime.InteropServices.DllImport("user32.dll",
                CharSet = System.Runtime.InteropServices.CharSet.Auto)]
static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int cch);

void Sumple()
{
    //メモ帳のウィンドウを探す
    IntPtr hWnd = FindWindow(null, "無題 - メモ帳");
    if (hWnd != null)
    {
        //ウィンドウタイトルを取得
        StringBuilder title = new StringBuilder(256);
        int titleLen = GetWindowText(hWnd, title, 256);

        //出力
        Console.WriteLine(title);
    }
}

[出力結果]

無題 - メモ帳


コメント
コメントする








    
この記事のトラックバックURL
トラックバック