HWND(콘솔 창 핸들)를 가져오는 방법

이 문서에서는 HWND(콘솔 창 핸들)를 가져오는 방법을 설명합니다.

적용 대상: Windows Server 2012 R2
원래 KB 번호: 124103

요약

콘솔 애플리케이션과 연결된 창을 조작하는 것이 유용할 수 있습니다. Win32 API는 콘솔 애플리케이션과 연결된 창 핸들을 가져오기 위한 직접 메서드를 제공하지 않습니다. 그러나 를 호출 FindWindow()하여 창 핸들을 가져올 수 있습니다. 이 함수는 클래스 이름 또는 창 이름을 기반으로 창 핸들을 검색합니다.

를 호출 GetConsoleTitle() 하여 현재 콘솔 타이틀을 확인합니다. 그런 다음 현재 콘솔 타이틀을 에 입력합니다 FindWindow().

추가 정보

여러 창에 동일한 타이틀이 있을 수 있으므로 현재 콘솔 창 제목을 고유한 제목으로 변경해야 합니다. 잘못된 창 핸들이 반환되지 않도록 하는 데 도움이 됩니다. 를 사용하여 SetConsoleTitle() 현재 콘솔 창 제목을 변경합니다. 프로세스는 다음과 같습니다.

  1. 를 호출 GetConsoleTitle() 하여 현재 콘솔 창 제목을 저장합니다.

  2. 를 호출 SetConsoleTitle() 하여 콘솔 타이틀을 고유한 타이틀로 변경합니다.

  3. Sleep(40)을 호출하여 창 제목이 업데이트되었는지 확인합니다.

  4. 호출 FindWindow(NULL, uniquetitle) HWND를 가져오려면 이 호출은 작업이 실패한 경우 HWND 또는 NULL을 반환합니다.

  5. 1단계에서 검색된 값을 사용하여 를 호출 SetConsoleTitle() 하여 원래 창 제목을 복원합니다.

결과 HWND를 테스트해야 합니다. 예를 들어 HWND를 호출 GetWindowText() 하고 결과를 GetConsoleTitle()와 비교하여 반환된 HWND가 현재 프로세스와 일치하는지 테스트할 수 있습니다.

결과 HWND가 모든 창 핸들 작업에 적합하지는 않습니다.

샘플 코드

다음 함수는 현재 콘솔 애플리케이션 창 핸들(HWND)을 검색합니다. 함수가 성공하면 반환 값은 콘솔 창의 핸들입니다. 함수가 실패하면 반환 값은 NULL입니다. 간결하게 하기 위해 일부 오류 검사는 생략됩니다.

HWND GetConsoleHwnd(void)
   {
       #define MY_BUFSIZE 1024 // Buffer size for console window titles.
       HWND hwndFound;         // This is what is returned to the caller.
       char pszNewWindowTitle[MY_BUFSIZE]; // Contains fabricated
                                           // WindowTitle.
       char pszOldWindowTitle[MY_BUFSIZE]; // Contains original
                                           // WindowTitle.

       // Fetch current window title.

       GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE);

       // Format a "unique" NewWindowTitle.

       wsprintf(pszNewWindowTitle,"%d/%d",
                   GetTickCount(),
                   GetCurrentProcessId());

       // Change current window title.

       SetConsoleTitle(pszNewWindowTitle);

       // Ensure window title has been updated.

       Sleep(40);

       // Look for NewWindowTitle.

       hwndFound=FindWindow(NULL, pszNewWindowTitle);

       // Restore original window title.

       SetConsoleTitle(pszOldWindowTitle);

       return(hwndFound);
   }