172 lines
5.5 KiB
Go
172 lines
5.5 KiB
Go
package main
|
|
|
|
import "golang.org/x/sys/windows"
|
|
|
|
// ── Win32 메시지 상수 ────────────────────────────────────────
|
|
|
|
const (
|
|
wmDestroy uint32 = 0x0002
|
|
wmClose uint32 = 0x0010
|
|
wmSetFont uint32 = 0x0030
|
|
wmSetText uint32 = 0x000C
|
|
wmCtlColorStatic uint32 = 0x0138
|
|
wmAppDone uint32 = 0x8001 // 다운로드 완료 시 사용하는 커스텀 메시지
|
|
)
|
|
|
|
// ── 윈도우 스타일 상수 ───────────────────────────────────────
|
|
|
|
const (
|
|
wsPopup uintptr = 0x80000000
|
|
wsCaption uintptr = 0x00C00000
|
|
wsSysMenu uintptr = 0x00080000
|
|
wsChild uintptr = 0x40000000
|
|
wsVisible uintptr = 0x10000000
|
|
ssCenter uintptr = 0x00000001
|
|
)
|
|
|
|
// ── 프로그레스바 상수 ────────────────────────────────────────
|
|
|
|
const (
|
|
pbsSmooth uintptr = 0x01
|
|
pbmSetRange32 uint32 = 0x0406
|
|
pbmSetPos uint32 = 0x0402
|
|
pbmSetBarColor uint32 = 0x0409
|
|
pbmSetBkColor uint32 = 0x2001
|
|
)
|
|
|
|
// ── 기타 Win32 상수 ──────────────────────────────────────────
|
|
|
|
const (
|
|
setBkModeTransparent = 1
|
|
|
|
swShow = 5
|
|
smCxScreen = 0
|
|
smCyScreen = 1
|
|
|
|
mbOK uintptr = 0x00000000
|
|
mbInfo uintptr = 0x00000040
|
|
mbError uintptr = 0x00000010
|
|
mbYesNo uintptr = 0x00000004
|
|
mbQ uintptr = 0x00000020
|
|
idYes = 6
|
|
|
|
iccProgressClass uint32 = 0x00000020
|
|
)
|
|
|
|
// ── 색상 ─────────────────────────────────────────────────────
|
|
|
|
// rgb COLORREF(0x00BBGGRR) 값을 생성한다.
|
|
func rgb(r, g, b uint8) uintptr {
|
|
return uintptr(r) | (uintptr(g) << 8) | (uintptr(b) << 16)
|
|
}
|
|
|
|
// 웹사이트 색상과 동일한 팔레트
|
|
var (
|
|
colorBg = rgb(46, 44, 47) // #2E2C2F
|
|
colorText = rgb(200, 200, 200) // 밝은 회색
|
|
colorAccent = rgb(186, 205, 176) // #BACDB0
|
|
colorProgressBg = rgb(65, 63, 67) // bg보다 약간 밝은 색
|
|
)
|
|
|
|
// ── DLL 및 프로시저 ──────────────────────────────────────────
|
|
|
|
var (
|
|
user32 = windows.NewLazySystemDLL("user32.dll")
|
|
kernel32 = windows.NewLazySystemDLL("kernel32.dll")
|
|
gdi32 = windows.NewLazySystemDLL("gdi32.dll")
|
|
comctl32 = windows.NewLazySystemDLL("comctl32.dll")
|
|
uxtheme = windows.NewLazySystemDLL("uxtheme.dll")
|
|
)
|
|
|
|
// user32.dll
|
|
var (
|
|
messageBoxWProc = user32.NewProc("MessageBoxW")
|
|
registerClassExWProc = user32.NewProc("RegisterClassExW")
|
|
createWindowExWProc = user32.NewProc("CreateWindowExW")
|
|
showWindowProc = user32.NewProc("ShowWindow")
|
|
updateWindowProc = user32.NewProc("UpdateWindow")
|
|
getMessageWProc = user32.NewProc("GetMessageW")
|
|
translateMsgProc = user32.NewProc("TranslateMessage")
|
|
dispatchMsgWProc = user32.NewProc("DispatchMessageW")
|
|
sendMessageWProc = user32.NewProc("SendMessageW")
|
|
postMessageWProc = user32.NewProc("PostMessageW")
|
|
defWindowProcWProc = user32.NewProc("DefWindowProcW")
|
|
destroyWindowProc = user32.NewProc("DestroyWindow")
|
|
postQuitMsgProc = user32.NewProc("PostQuitMessage")
|
|
getSystemMetricsProc = user32.NewProc("GetSystemMetrics")
|
|
getDpiForSystemProc = user32.NewProc("GetDpiForSystem")
|
|
setProcessDpiAwarenessContextProc = user32.NewProc("SetProcessDpiAwarenessContext")
|
|
findWindowWProc = user32.NewProc("FindWindowW")
|
|
setForegroundWindowProc = user32.NewProc("SetForegroundWindow")
|
|
)
|
|
|
|
// kernel32.dll
|
|
var (
|
|
createMutexWProc = kernel32.NewProc("CreateMutexW")
|
|
getModuleHandleWProc = kernel32.NewProc("GetModuleHandleW")
|
|
)
|
|
|
|
// gdi32.dll
|
|
var (
|
|
createFontIndirectWProc = gdi32.NewProc("CreateFontIndirectW")
|
|
createSolidBrushProc = gdi32.NewProc("CreateSolidBrush")
|
|
setTextColorProc = gdi32.NewProc("SetTextColor")
|
|
setBkModeProc = gdi32.NewProc("SetBkMode")
|
|
deleteObjectProc = gdi32.NewProc("DeleteObject")
|
|
)
|
|
|
|
// comctl32.dll / uxtheme.dll
|
|
var (
|
|
initCommonControlsExProc = comctl32.NewProc("InitCommonControlsEx")
|
|
setWindowThemeProc = uxtheme.NewProc("SetWindowTheme")
|
|
)
|
|
|
|
// ── Win32 구조체 ─────────────────────────────────────────────
|
|
|
|
type wndClassExW struct {
|
|
cbSize uint32
|
|
style uint32
|
|
lpfnWndProc uintptr
|
|
cbClsExtra int32
|
|
cbWndExtra int32
|
|
hInstance uintptr
|
|
hIcon uintptr
|
|
hCursor uintptr
|
|
hbrBackground uintptr
|
|
lpszMenuName *uint16
|
|
lpszClassName *uint16
|
|
hIconSm uintptr
|
|
}
|
|
|
|
type msgW struct {
|
|
hwnd uintptr
|
|
message uint32
|
|
wParam uintptr
|
|
lParam uintptr
|
|
time uint32
|
|
ptX int32
|
|
ptY int32
|
|
}
|
|
|
|
type initCommonControlsExS struct {
|
|
dwSize uint32
|
|
dwICC uint32
|
|
}
|
|
|
|
type logFontW struct {
|
|
lfHeight int32
|
|
lfWidth int32
|
|
lfEscapement int32
|
|
lfOrientation int32
|
|
lfWeight int32
|
|
lfItalic byte
|
|
lfUnderline byte
|
|
lfStrikeOut byte
|
|
lfCharSet byte
|
|
lfOutPrecision byte
|
|
lfClipPrecision byte
|
|
lfQuality byte
|
|
lfPitchAndFamily byte
|
|
lfFaceName [32]uint16
|
|
}
|