프로그램을 만들다가 특정 윈도우를 찾아서 입력을 넣거나 제어를 하고 싶을 때가 있습니다.
Alt + Tab 을 하거나 그 프로그램을 찾아 마우스로 클릭을 해주는데 이것을 코드로 한번 해보겠습니다.
HWND hwndNotepad = FindWindow(NULL, TEXT("제목 없음 - Windows 메모장"));
if (hwndNotepad != NULL)
{
// 메모장 창을 화면의 최전면으로 가져옵니다.
SetForegroundWindow(hwndNotepad);
// 메모장 내의 특정 컨트롤 (예를 들어, 편집 컨트롤)의 핸들을 얻습니다.
// 메모장의 편집 컨트롤의 정확한 클래스 이름은 시스템 또는 메모장 버전에 따라 다를 수 있으므로,
// 이 예제에서는 간단히 메모장의 메인 윈도우 핸들을 사용합니다.
HWND hwndEdit = FindWindowEx(hwndNotepad, NULL, TEXT("Edit"), NULL);
if (hwndEdit != NULL)
{
// 메모장의 편집 컨트롤에 포커스를 설정합니다.
SetFocus(hwndEdit);
}
}
사실 이예제에서는 메모장을 작업하는 창으로 만드는 순간 Edit에 포커스 되지만 다른 프로그램에서 원하는 컨트롤러에 포커스 하기 위해 추가로 더 작성했습니다.
https://learn.microsoft.com/ko-kr/windows/win32/api/winuser/nf-winuser-setforegroundwindow
SetForegroundWindow 함수(winuser.h) - Win32 apps
지정된 창을 만든 스레드를 포그라운드로 가져와 창을 활성화합니다.
learn.microsoft.com
https://learn.microsoft.com/ko-kr/windows/win32/api/winuser/nf-winuser-setfocus
SetFocus 함수(winuser.h) - Win32 apps
키보드 포커스를 지정된 창으로 설정합니다. 창은 호출 스레드의 메시지 큐에 연결되어야 합니다.
learn.microsoft.com
대부분 윈도우 핸들을 가지고 SetFocus()로 작업하는 창을 바꾸는 것처럼 보이는데 잘 작동하지 않는 경우가 많아서 학습과 코드 복붙용으로 작성하였습니다.