일반적으로 포커스를 가진 윈도우의 핸들을 가져오거나 지정하는데 사용되는 함수는 GetFocus(), SetFocus()이다. 하지만, 이들 함수들은 모든 윈도우의 포커스를 가져오는 것이 아니고, 현재 윈도우 내의 포커스를 가진 핸들을 가져오는 함수이다.
쉽게 말하자면, 자신의 윈도우에서 포커스를 가진 특정 윈도우(버튼, 에디트 박스 등)의 핸들을 가져올 때 사용하는 것은 문제가 없을 것이지만,
다른 윈도우를 대상으로 이 함수를 쓰게 된다면, 우리가 원하는 핸들 대신 NULL 값을 가져오게 될 것이다.
NULL 값을 가져온 경우 포커스를 가진 윈도우가 다른 스레드 메시지 큐에 있기 때문이다.
하지만, 이에 대한 해결 방법이 있다.
먼저 GetForegroundWindow() 를 사용하여 실제 포커스를 가진 윈도우의 최상위 부모 핸들을 얻는다.
그리고 이 윈도우의 스레드를 구해(GetWindowThreadProcessId()) 현재 스레드에 연결(AttachThreadInput())하면 된다.
이 후에 GetFocus()를 호출하게 되면, NULL 값이 아닌 포커스를 가진 다른 윈도우의 핸들을 가져오는 것을 확인 할 수 있다.
반응형
'Programming > Blah Blah' 카테고리의 다른 글
dll 만들기 (0) | 2016.07.12 |
---|---|
참조 카운트 Reference Count (0) | 2016.07.12 |
개발용 폰트 (0) | 2016.07.07 |
얼랭(함수형 언어) 사용해보기 (0) | 2016.04.04 |
#region(리전) 간단설명 (0) | 2016.03.27 |
Chunk 데이터 분산 처리 (0) | 2016.02.18 |
모노디벨롭 설정 저장 (0) | 2016.01.17 |
아스키 코드 표 (0) | 2016.01.07 |