logo

English

이곳의 프로그래밍관련 정보와 소스는 마음대로 활용하셔도 좋습니다. 다만 쓰시기 전에 통보 정도는 해주시는 것이 예의 일것 같습니다. 질문이나 오류 수정은 siseong@gmail.com 으로 주세요. 감사합니다.

[WIN32] Process ID로 HWND 구하기

by digipine posted Oct 29, 2017
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print

프로세스 아이디로 윈도우 핸들을 구하는 방법입니다.
아래 소스를 참고 하세요.

ULONG ProcIDFromWnd(HWND hwnd) // 윈도우 핸들로 프로세스 아이디 얻기  
{  
 ULONG idProc;  
 GetWindowThreadProcessId( hwnd, &idProc );  
 return idProc;  
}

HWND GetWinHandle(ULONG pid) // 프로세스 아이디로 윈도우 핸들 얻기  
{  
 HWND tempHwnd = FindWindow(NULL,NULL); // 최상위 윈도우 핸들 찾기  
 
 while( tempHwnd != NULL )  
 {  
  if( GetParent(tempHwnd) == NULL ) // 최상위 핸들인지 체크, 버튼 등도 핸들을 가질 수 있으므로 무시하기 위해  
  if( pid == ProcIDFromWnd(tempHwnd) )  
   return tempHwnd;  
  tempHwnd = GetWindow(tempHwnd, GW_HWNDNEXT); // 다음 윈도우 핸들 찾기  
 }  
 return NULL;  
}
 



사용 예제) 
주의 할것은 프로세스가 생성된 뒤 윈도우가 제대로 생성될 때까지 Sleep함수로 기다려야 합니다.

    startInfo.cb          = sizeof(STARTUPINFO);
    startInfo.lpReserved  = NULL;
    startInfo.lpTitle     = L"계산기";
    startInfo.lpDesktop   = NULL;
    startInfo.dwX         = 0;
    startInfo.dwY         = 0;
    startInfo.dwXSize     = 0;
    startInfo.dwYSize     = 0;
    startInfo.dwXCountChars    = 0;
    startInfo.dwYCountChars    = 0;
    startInfo.dwFlags     = STARTF_USESTDHANDLES;
    startInfo.wShowWindow = SW_SHOWDEFAULT;
    startInfo.lpReserved2 = NULL;
    startInfo.cbReserved2 = 0;
    startInfo.hStdInput   = GetStdHandle(STD_INPUT_HANDLE);
    startInfo.hStdOutput  = GetStdHandle(STD_OUTPUT_HANDLE);
    startInfo.hStdError   = GetStdHandle(STD_ERROR_HANDLE);

    ref = CreateProcess(
  L"C:\\WINDOWS\\system32\\calc.exe",
  L"",
            NULL,
            NULL,
            TRUE,
            CREATE_NEW_CONSOLE,
            NULL,
   L"C:\\WINDOWS\\system32",
            &startInfo,
            &pidInfo);

 Sleep(100);
 myhWnd =  GetWinHandle(pidInfo.dwProcessId);

TAG •

List of Articles
No. Subject Author Date Views
45 [C#] UI Update from Thread, Thread에서 UI 업데이트 하기 샘플 코드 lizard2019 2019.01.23 1041
44 [C#] 프로그램 종료 방법 lizard2019 2019.01.23 6789
43 [C#] 코드 실행 시간 측정 및 DateTime 스트링으로 변환 포맷 lizard2019 2019.01.23 23017
42 [Win32] HBITMAP Contrast 조절하는 코드 - RGB 이미지 보정 엉뚱도마뱀 2018.05.04 737
41 [Windows] DOS 명령어 실행하고 결과 스트링 가져오는 샘플 코드 digipine 2017.11.02 2689
40 VC++ UTF8 변환 관련 매크로 digipine 2017.11.02 8779
39 C# 으로 구현한 화면 캡춰 클래스 1 digipine 2017.11.02 33969
38 C# - 한글로된 폰트명 처리 방법 개선 (Font Name Localization) digipine 2017.11.02 1392
37 [C#] StreamReader 에서의 한글 Encoding 문제 digipine 2017.10.29 1000
36 [API Hooking] Dll Injection 하는 방법 digipine 2017.10.29 5225
35 [WIN32] 파일 핸들로 파일 명 구하기 digipine 2017.10.29 1066
» [WIN32] Process ID로 HWND 구하기 digipine 2017.10.29 5019
33 MS의 Hot Fix API의 유형 연구 digipine 2017.10.29 312
32 [WIN32] 실행 중인 프로세스를 외부에서 강제로 종료, 안전한 TerminateProcess digipine 2017.10.29 3460
31 [WIN32] API Hook 정리 문서 digipine 2017.10.29 1970
30 [WIN32, WINCE] 디스크 용량 구하는 방법 API GetDiskFreeSpaceEx digipine 2017.10.29 1569
29 [WINCE] MulDiv 함수 구현 digipine 2017.10.29 699
28 [DirectShow] 화면 원본 비율유지 digipine 2017.10.29 960
27 [VC++, WInAPI] 폴더를 통채로 지우기, 서브 폴더 포함, DeleteAllFiles digipine 2017.10.29 1763
26 [Win API]프로세스 아이디와 윈도우 핸들을 이용 파일명 구하기 digipine 2017.10.29 1393
Board Pagination Prev 1 2 3 Next
/ 3