HWND FindWindow(lpszClass, lpszWindow) |
|
FindWindow を使うには、ウインドウの「クラス名」が必要になります。
そこで、Microsoft SPY++ を使用してクラス名を調べてみます。
「スパイ」から「ウインドウ」を選んで、ウインドウの一覧を表示させ
て、「検索」から「ウインドウ検索」を選んで検索ダイアログを表示
させます。
ファインタ゜ーツールを目的のウインドウのタイトルにドラッグして
下さい。
|
|
|
以下の関数を定義して、EnumWindows 関数で呼び出します。
BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam )
{
char ClassName[512];
char TitleName[512];
char Buffer[512];
GetClassName( hwnd, ClassName, 512 );
GetWindowText( hwnd, TitleName, 512 );
if ( lstrcmp( TitleName, "無題 - メモ帳" ) == 0 ) {
wsprintf( Buffer, "%08x", hwnd );
CharUpperBuff( Buffer, lstrlen( Buffer ) );
SetWindowText( GetDlgItem( (HWND)lParam, IDC_COUNT ), Buffer );
return FALSE;
}
return TRUE;
}
| |
|
|
|
|
BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam )
{
char ClassName[512];
char TitleName[512];
char Buffer[512];
GetClassName( hwnd, ClassName, 512 );
GetWindowText( hwnd, TitleName, 512 );
if ( lstrcmp( TitleName, "無題 - メモ帳" ) == 0 ) {
wsprintf( Buffer, "%08x", hwnd );
CharUpperBuff( Buffer, lstrlen( Buffer ) );
SetWindowText( GetDlgItem( (HWND)lParam, IDC_COUNT ), Buffer );
PostMessage(
hwnd
,WM_COMMAND
,MAKEWPARAM(LOWORD(33),HIWORD(0))
,0
);
return FALSE;
}
return TRUE;
}
| |
|
この「33」というID を調べるには、「SPY++」を使用します
|
|
ウインドウハンドルから、タイトルテキストとクラス名と実行ファイル名を
取得してリストビューに一覧を表示させます
|
// ******************************************************************************
// メッセージ ハンドラ
// ******************************************************************************
LRESULT CALLBACK MyDialog( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
{
int id;
LV_COLUMN title;
switch( message )
{
case WM_INITDIALOG:
title.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
title.fmt = LVCFMT_LEFT;
title.cx = 120;
title.pszText = "ウインドウハンドル";
title.iSubItem = 0;
ListView_InsertColumn(GetDlgItem(hDlg,IDC_LIST), 0, &title);
title.cx = 200;
title.pszText = "タイトル";
title.iSubItem = 1;
ListView_InsertColumn(GetDlgItem(hDlg,IDC_LIST), 1, &title);
title.cx = 100;
title.pszText = "クラス名";
title.iSubItem = 2;
ListView_InsertColumn(GetDlgItem(hDlg,IDC_LIST), 2, &title);
title.cx = 200;
title.pszText = "プログラムファイル名";
title.iSubItem = 3;
ListView_InsertColumn(GetDlgItem(hDlg,IDC_LIST), 3, &title);
return TRUE;
case WM_COMMAND:
id = LOWORD(wParam);
switch( id ) {
case IDOK:
PostMessage( GetParent( hDlg ),WM_CLOSE, 0, 0 );
break;
case IDC_EXECMEMO:
nCount = 0;
EnumWindows( EnumWindowsProc, (LPARAM)hDlg );
break;
}
break;
}
return FALSE;
}
// ******************************************************************************
// 列挙
// ******************************************************************************
BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam )
{
LV_ITEM field;
char Buffer[3][512];
DWORD ProcessId;
HANDLE hSnapshot;
PROCESSENTRY32 pe;
HWND hList;
hList = GetDlgItem( (HWND)lParam, IDC_LIST);
wsprintf( Buffer[0], "%08x", hwnd );
CharUpperBuff( Buffer[0], lstrlen( Buffer[0] ) );
field.mask = LVIF_TEXT;
field.pszText = Buffer[0];
field.iItem = nCount;
field.iSubItem = 0;
ListView_InsertItem(hList, &field);
GetWindowText( hwnd, Buffer[1], 512 );
field.pszText = Buffer[1];
field.iItem = nCount;
field.iSubItem = 1;
ListView_SetItem(hList, &field);
GetClassName( hwnd, Buffer[2], 512 );
field.pszText = Buffer[2];
field.iItem = nCount;
field.iSubItem = 2;
ListView_SetItem(hList, &field);
GetWindowThreadProcessId( hwnd, &ProcessId );
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS , 0);
if (hSnapshot)
{
pe.dwSize = sizeof(PROCESSENTRY32);
if ( Process32First(hSnapshot, &pe) ) {
while( 1 ) {
if (pe.th32ProcessID == ProcessId) {
field.pszText = pe.szExeFile;
field.iItem = nCount;
field.iSubItem = 3;
ListView_SetItem(hList, &field);
break;
}
Process32Next(hSnapshot, &pe);
}
}
CloseHandle(hSnapshot);
}
nCount++;
return TRUE;
}
| |
|
|
|