//go:build windows package main import ( "fmt" "runtime" "unsafe" "golang.org/x/sys/windows" ) // showTestWindow displays a native Win32 MessageBox with build info. // The intent is to give end-users a visual smoke-test on first run: // double-click drover.exe (or run `drover gui`) and see that: // 1. the binary actually launches on Windows, // 2. the embedded version metadata is correct, // 3. the process can talk to user32.dll (i.e. the runtime is healthy). // // This is *not* the production GUI — that comes later via Wails. Here we // purposely use only stdlib + golang.org/x/sys/windows so this works // before any Wails/CGO machinery is wired up. func showTestWindow() { user32 := windows.NewLazySystemDLL("user32.dll") messageBox := user32.NewProc("MessageBoxW") body := fmt.Sprintf( "Drover-Go v%s\n\n"+ "Commit: %s\n"+ "Build: %s\n"+ "Go: %s\n"+ "Arch: %s/%s\n\n"+ "OK — the binary launched and the Windows API is reachable.", Version, Commit, BuildDate, runtime.Version(), runtime.GOOS, runtime.GOARCH, ) title := fmt.Sprintf("Drover-Go v%s — test window", Version) bodyW, _ := windows.UTF16PtrFromString(body) titleW, _ := windows.UTF16PtrFromString(title) // MB_OK | MB_ICONINFORMATION | MB_SETFOREGROUND | MB_TOPMOST // MB_TOPMOST is essential — without it the message box can pop up // behind other windows and the user thinks nothing happened. const flags = 0x00000000 | 0x00000040 | 0x00010000 | 0x00040000 messageBox.Call( 0, uintptr(unsafe.Pointer(bodyW)), uintptr(unsafe.Pointer(titleW)), flags, ) }