|
typedef struct _LBOXENUMWINDOWINFO {
HWND hList;
int nIndex;
DWORD nOption;
LPTSTR szBuffer;
} LBOXENUMWINDOWINFO;
#define LBOX_ENUMWINDOW_CLASS 0x00000001
#define LBOX_ENUMWINDOW_TITLE 0x00000002
#define LBOX_ENUMWINDOW_PROCESS 0x00000004
// *********************************************************
// LboxEnumWindowInfo 用 CallBack
// *********************************************************
BOOL CALLBACK EnumWindowsProc( HWND hWnd, LPARAM lParam )
{
LBOXENUMWINDOWINFO *lewi;
DWORD ProcessId;
lewi = (LBOXENUMWINDOWINFO *)lParam;
wsprintf( lewi->szBuffer, "%08lX", (DWORD)hWnd );
if ( lewi->nOption & LBOX_ENUMWINDOW_CLASS ) {
lstrcat( lewi->szBuffer, "\t" );
GetClassName( hWnd, lewi->szBuffer+lstrlen(lewi->szBuffer), 512 );
}
if ( lewi->nOption & LBOX_ENUMWINDOW_TITLE ) {
lstrcat( lewi->szBuffer, "\t" );
GetWindowText( hWnd, lewi->szBuffer+lstrlen(lewi->szBuffer), 512 );
}
if ( lewi->nOption & LBOX_ENUMWINDOW_PROCESS ) {
lstrcat( lewi->szBuffer, "\t" );
GetWindowThreadProcessId( hWnd, &ProcessId );
wsprintf(
lewi->szBuffer+lstrlen(lewi->szBuffer),
"%08lX",
ProcessId
);
}
LboxListInsert( lewi->hList, lewi->nIndex, lewi->szBuffer );
lewi->nIndex++;
return TRUE;
}
// *********************************************************
// リストボックスにトップレベルウインドウの情報一覧を追加
// 戻り値 : 無し
// *********************************************************
void LboxEnumWindowInfo( HWND hList, int nIndex, DWORD nOption )
{
LBOXENUMWINDOWINFO lewi;
lewi.hList = hList;
lewi.nIndex = nIndex;
lewi.nOption = nOption;
lewi.szBuffer = (LPTSTR)GlobalAlloc(GMEM_FIXED, 4096);
EnumWindows(
EnumWindowsProc, // コールバック関数へのポインタ
(LPARAM)&lewi // アプリケーション定義の値
);
GlobalFree( (HGLOBAL)lewi.szBuffer );
}
| |