ウインドウを探す

現在開いているウインドウを列挙するAPIとしてEnumWindowsがある。この関数は引数として"コールバック関数"を指定して使う。
ここでは使用例としてInternet Explorerを見つけるクラスを作成した。コールバック関数EnumWindowsProc_をクラスのメンバ関数として定義して利用している。

class	CDnpEnumInternetExplore
{
	//
	//	EnumWindowsのコールバック関数
	//
	//※ユーザーは直接呼ばないこと!
	//
	static	BOOL	CALLBACK	EnumWindowsProc_(HWND hwnd,LPARAM lParam)
	{
		if(lParam == NULL)
			return	FALSE;
		return	((CDnpEnumInternetExplore*)lParam)->EnumWindowsProc(hwnd);
	}

public:


	//
	//	列挙開始
	//
	bool	EnumStart(void)
	{
		BOOL	ret;

		ret = ::EnumWindows(EnumWindowsProc_,(LPARAM)this);

		return	ret ? true : false;
	}


	//
	//	EnumWindowsのコールバック実処理関数
	//
	//※ユーザーは直接呼ばないこと!
	//
	BOOL	EnumWindowsProc(HWND hwnd)
	{
		int		nRet;
		TCHAR	pszName[1024];

		//ウインドウクラスの取得
		nRet = ::GetClassName(hwnd,pszName,1024);
		if(nRet == 0)
			return	TRUE;

		//IEはクラス名が"IEFrame"
		nRet = ::_tcscmp(pszName,_T("IEFrame"));
		if(nRet != 0)
			return	TRUE;

		//ウインドウタイトル取得
		nRet = ::GetWindowText(hwnd,pszName,1024);
		if(nRet == 0)
			return	TRUE;

		//ウインドウタイトル表示
		::MessageBox(NULL,pszName,_T(""),MB_OK);

		return	TRUE;
	}
};




void	Test(void)
{
	CDnpEnumInternetExplore	cEnum;

	cEnum.EnumStart();
}

プロジェクトファイルをダウンロード


カテゴリー「ウインドウ操作」 のエントリー