Files
a301_launcher/CLAUDE.md
2026-02-25 00:20:43 +09:00

2.1 KiB

CLAUDE.md

Build Command

C:\Users\98kim\sdk\go1.25.1\bin\go.exe build -ldflags="-H windowsgui -s -w" -o launcher.exe .

-H windowsgui 필수 — 없으면 실행 시 콘솔 창이 함께 열림.

Tech Stack

  • Go 단일 파일 (main.go)
  • Win32 APIuser32.dll, gdi32.dll, comctl32.dll, uxtheme.dll, shell32.dll
  • golang.org/x/sys/windows + windows/registry

Project Purpose

"One of the plans" Windows 런처. a301:// 커스텀 URI 프로토콜 등록 → 게임 자동 다운로드/업데이트/실행.

Architecture

모든 로직이 main.go 단일 파일에 있음:

  • enableDPIAwareness()SetProcessDpiAwarenessContext(PER_MONITOR_AWARE_V2) 호출. main() 첫 줄에서 실행.
  • downloadWithProgress() — Win32 메시지 루프 직접 운영. 반드시 메인 고루틴에서 호출 (runtime.LockOSThread).
  • progressWndProc()WM_CTLCOLORSTATIC으로 다크 테마 적용. hBrushBg 전역 변수 참조.
  • setProgress(text, pct) — 다운로드 고루틴에서 호출해 레이블 텍스트와 진행 막대 동시 업데이트.
  • fetchServerInfo()https://a301.api.tolelom.xyz/api/download/info 조회.
  • ensureGame()A301.exe SHA256 해시 비교 후 불일치 시 재다운로드.

UI Details

  • DPI: GetDpiForSystem()dpiScale(px, dpi) 함수로 모든 크기 동적 계산
  • 진행 막대 색: SetWindowTheme("", "") 비주얼 스타일 비활성화 후 PBM_SETBARCOLOR 적용
  • 다크 배경: WM_CTLCOLORSTATIC 핸들러에서 hBrushBg 반환 + SetBkMode(TRANSPARENT)
  • 타이틀 레이블(titleLabelHwnd)만 강조색, 나머지 STATIC은 밝은 회색

Key Constants

serverInfoURL = "https://a301.api.tolelom.xyz/api/download/info"
gameExeName   = "A301.exe"    // 기술 식별자 — 게임 표기명과 별개
protocolName  = "a301"        // 기술 식별자

Notes

  • extractZip() — zip 내 최상위 디렉토리 1단계 제거 후 추출. launcher.exe 자신은 덮어쓰기 방지.
  • 레지스트리는 HKCU (현재 사용자) 에만 쓰므로 관리자 권한 불필요.