단순하게 szImageName과 동일한 모든 핸들을 vHwnd에 저장하는 모듈
#include <tlhelp32.h>
#include <vector>
using namespace std;
HWND FindWindowHandle;
vector<HWND> vHwnd;
void GetHwnd(LPSTR szImageName);
BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam);
void main()
{
GetHwnd("notepad.exe");
for(int i=0; i<vHwnd.size(); i++)
{
TRACE("%.8x\n", vHwnd[i]);
}
}
BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)
{
DWORD pid;
GetWindowThreadProcessId(hwnd,&pid);
if((DWORD)lParam==pid)// && IsWindowVisible(hwnd))
{
#if defined(_DEBUG)
TCHAR name[255]={0,};
GetWindowText(hwnd,name,255);
TRACE("%s 0x%08x(%d) 0x%08x(%d)\n",name, hwnd,hwnd,pid,pid);
#endif
FindWindowHandle = hwnd;
return false;
}
return true;
}
void GetHwnd(LPSTR szImageName)
{
PROCESSENTRY32 pe;
HANDLE hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
vHwnd.clear();
if (!hSnapshot)
{
::MessageBoxA(NULL, "CreateToolhelp32Snapshot() : Fail!", NULL,NULL);
}
ULONG count=0;
pe.dwSize=sizeof(PROCESSENTRY32);
BOOL retval=Process32First(hSnapshot,&pe);
do
{
if(strcmp(pe.szExeFile, szImageName)==0)
{
if(::EnumWindows(&EnumWindowsProc,(LPARAM)pe.th32ProcessID)==false)
{
vHwnd.push_back(FindWindowHandle);
}
}
count++;
}while(Process32Next(hSnapshot,&pe));
CloseHandle(hSnapshot);
}
'프로그래밍 팁 > etc' 카테고리의 다른 글
클래스에서 함수 포인터 사용하기 (0) | 2010.04.01 |
---|---|
Sleep (0) | 2010.03.31 |
IP주소값 가져오기 (0) | 2010.03.29 |
윈도우 제공 API를 이용한 암호화 (0) | 2010.03.25 |
일정 길이(픽셀단위) 이상의 문자열에 ...으로 나타내기 (0) | 2010.03.23 |