2.1 KiB
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 API —
user32.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.exeSHA256 해시 비교 후 불일치 시 재다운로드.
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(현재 사용자) 에만 쓰므로 관리자 권한 불필요.