トップレベル・ウィンドウを列挙し、タイトルバーのテキストを取得


 ここでは、トップレベル・ウィンドウのHandleを列挙し、タイトルバーのテキストを取得する方法を示します。

【使用するAPI】

    [ヘッダー]
         Winuser.hで宣言、Windows.hをインクルード

  [インポートライブラリ]
          User32.lib 

   [API]
         EnumWindows      :   トップレベル・ウィンドウのHandleを列挙

         EnumWindowsProc  :   EnumWindowsを実行すると呼び出されるコールバック(CALLBACK)関数

         GetWindowText    :   タイトルバーのテキストを取得

   (APIの詳細に付いては、MSDNライブラリを参照して下さい。)

【サンプル】

//取得したタイトルバーのテキストを格納する配列
CStringArray m_strWinTxt;


//EnumWindowsを実行すると呼び出されるコールバック(CALLBACK)関数
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lparam)
{
	char buf[99];

        //-----------------------------------------------------
	//Windowのタイトルを取得
	GetWindowText(hwnd, buf, 99);

	if(hwnd){
		//Windows Titleを格納して、次のHandleを取得
		m_strWinTxt.Add(buf);
		return(true);
	}
	else{
		//Windows Handleの列挙を止める
		return(false);
	}
}

void CWinhandleDlg::OnButton1() 
{
	int i;

        //-----------------------------------------------------
	//Window Handleとタイトルの列挙
	boolean result = EnumWindows(EnumWindowsProc, 0);

	//列挙したWindow Titleをリストボックスへ出力
	CListBox* myLIST1 = (CListBox *)GetDlgItem(IDC_LIST1);
	for( i = 0; i < m_strWinTxt.GetSize(); i++){
		myLIST1->AddString(m_strWinTxt.GetAt(i));
	}	
}