아래는 프로세스 아이디로 HWND를 구하는 코드이다
먼저 CreateToolhelp32Snapshot를 이용해서 현재 실행되고 있는 프로세스의 ID를 구해놓는다
EnumWindow 함수를 호출 하면
EnumWindowProc 에서 GetWindowThreadProcessId함수를 이용, 프로세스ID를 구한 후
EnumWindowProc의 lParam으로 들어온 구해놓은 프로세스ID와
GetWindowThreadProcessId를 이용해서 얻어온 프로세스ID를 비교해서 같으면
EnumWindowsProc의 첫번째 인자 hWnd가 구해놓은 프로세스ID의 HWND이다
HWND g_hWnd;
BOOL CALLBACK EnumWindowsProc( HWND hWnd, LPARAM lParam )
{
g_hWnd= 0;
DWORD PID = 0;
::GetWindowThreadProcessId(hWnd, &PID);
if((DWORD)lParam == PID)
{
g_hWnd= hWnd;
return FALSE;
}
return TRUE;
}
void CTestDlg::OnBnClickedButton1()
{
HANDLE hSnapshot = CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0);
if((int)hSnapshot != -1)
{
PROCESSENTRY32 pe32 ;
BOOL bContinue ;
if (Process32First(hSnapshot, &pe32))
{
do
{
if((!EnumWindows(EnumWindowsProc, pe32.th32ProcessID)) && (g_hWnd!= 0));
{
//Finded
}
}while(Process32Next(hSnapshot, &pe32 ));
}
}
CloseHandle(hSnapshot);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL EnumWindows(
WNDENUMPROC lpEnumFunc, // callback function
LPARAM lParam // application-defined value
);
EnumWindows 함수는
데스크 탑 아래의 모든 윈도우 목록을 조사해서 콜백 함수로 넘겨 준다.
첫번째 인수로 콜백 함수의 함수 포인터가 필요한데 다음 원형을 가지는 콜
백 함수를 만들어 주어야 한다.
BOOL CALLBACK EnumWindowsProc(
HWND hwnd, // handle to parent window
LPARAM lParam // application-defined value
);
이 함수의 hwnd로는 찾은 윈도우의 핸들이 전달된다. 핸들로 원하는 작업을 할 수 있다.
윈도우 찾기를 그만 하고 싶으면 FALSE를 리턴하고 끝까지 찾기를 계속하려면 TRUE를 리턴하면 된다.
'MFC' 카테고리의 다른 글
IWebBrowser2 얻기 (0) | 2012.10.05 |
---|---|
GDI object 생성, 소멸 (0) | 2012.10.05 |
DrawDragRect를 이용한 사각영역 그리기 (0) | 2012.10.05 |
Drag file on dialog (0) | 2012.10.05 |
Dialog에서 부모 윈도우 알아내기 (0) | 2012.10.05 |