Go/window_api
[Go] Windows API - 창 핸들 찾기
_HelloWorld_
2025. 3. 5. 15:19
메모장(Notepad)을 켠 상태에서 아래 코드를 실행
package main
import (
"fmt"
"syscall"
"unsafe"
)
func FindWindow(className, windowName string) uintptr {
mod := syscall.NewLazyDLL("user32.dll")
findWindow := mod.NewProc("FindWindowW")
cClassName := syscall.StringToUTF16Ptr(className)
cWindowName := syscall.StringToUTF16Ptr(windowName)
hWnd, _, _ := findWindow.Call(
uintptr(unsafe.Pointer(cClassName)),
uintptr(unsafe.Pointer(cWindowName)),
)
return hWnd
}
func main() {
hWnd := FindWindow("", "제목 없음 - 메모장")
if hWnd == 0 {
fmt.Println("메모장을 찾을 수 없습니다.")
} else {
fmt.Printf("메모장 핸들: 0x%x\n", hWnd)
}
}
결과 해석
- 메모장이 켜져 있다면 → 메모장 핸들: 0x00000000000103d2 (핸들 값)
- 메모장이 없으면 → 메모장을 찾을 수 없습니다.
findWindow.Call(
uintptr(unsafe.Pointer(cClassName)),
uintptr(unsafe.Pointer(cWindowName)),
)
여기서 두 번째 인자(탭 이름)에 0을 넣으면, 창 클래스 이름만으로 핸들을 찾습니다.
반대로, 첫 번째 인자(클래스 이름)에 0을 넣으면 창 제목(탭 이름)으로 핸들을 찾습니다.