티스토리 뷰

Win32API에서 HWND은 보통 윈도우 핸들값을 갖고 오기위해 사용된다. 약자도 Handle to a WiNDow 이다.

그리고 HANDLE은 void* type으로 보통 프로세스의 핸들을 저장하기 위해 사용된다.

이 예제는 프로세스의 ID알고 있는 상태에서 현재 윈도우에 띄어져 있는 프로세스의 윈도우핸들을 얻어오는 역할을 한다.


// 여기서 알고 있는 프로세스ID는 pi[i].dwProcessId 이다.

HWND tempHwnd = FindWindowA(NULL, NULL);
	
ULONG idProc;
		
while(tempHwnd!=NULL){
	if(::GetParent(tempHwnd) == NULL){
		GetWindowThreadProcessId(tempHwnd, &idProc);
		if(pi[i].dwProcessId == idProc){

			// 이 상태가 프로세스 아이디를 갖고
			// 윈도우핸들(tempHwnd)을 얻은 상태이다.		
			
			break;
		}
	}
	tempHwnd = ::GetNextWindow(tempHwnd, GW_HWNDNEXT);
}



또한, 윈도우핸들을 알고 있을 때 GetWindowThreadProcessId()를 이용하면 프로세스 ID를 얻어올 수 있고,

프로세스 ID를 알고 있을 때, OpenProcess()로 프로세스핸들을 얻어올 수 있다.

이 프로세스핸들을 잘 알고 있으면 꽤나 유용하다.
댓글
04-19 19:21
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday