본문 바로가기

C++

[C++] Window SetFocus() SetForegroundWindow()


프로그램을 만들다가 특정 윈도우를 찾아서 입력을 넣거나 제어를 하고 싶을 때가 있습니다.

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()로 작업하는 창을 바꾸는 것처럼 보이는데 잘 작동하지 않는 경우가 많아서 학습과 코드 복붙용으로 작성하였습니다.