現在開いているウインドウを列挙する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();
}
