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을 넣으면 창 제목(탭 이름)으로 핸들을 찾습니다.

댓글수0