76 lines
1.8 KiB
Go
76 lines
1.8 KiB
Go
//go:build windows
|
|
|
|
package main
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"golang.org/x/sys/windows/registry"
|
|
|
|
"github.com/wailsapp/wails/v3/pkg/w32"
|
|
)
|
|
|
|
// getWindowsSpecialFolder 从注册表读取 Windows 特殊文件夹的真实路径
|
|
func getWindowsSpecialFolder(guid string) string {
|
|
key, err := registry.OpenKey(registry.CURRENT_USER,
|
|
`Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders`,
|
|
registry.READ)
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
defer key.Close()
|
|
|
|
val, _, err := key.GetStringValue(guid)
|
|
if err != nil || val == "" {
|
|
return ""
|
|
}
|
|
|
|
path := os.ExpandEnv(val)
|
|
if _, err := os.Stat(path); err != nil {
|
|
return ""
|
|
}
|
|
return path
|
|
}
|
|
|
|
// getWindowsDrivePaths 返回所有可用盘符路径
|
|
func getWindowsDrivePaths() map[string]string {
|
|
paths := make(map[string]string)
|
|
for _, drive := range "ABCDEFGHIJKLMNOPQRSTUVWXYZ" {
|
|
path := string(drive) + ":\\"
|
|
if _, err := os.Stat(path); err == nil {
|
|
key := string(drive)
|
|
paths[key] = path
|
|
}
|
|
}
|
|
return paths
|
|
}
|
|
|
|
// setWindowTitleBar 设置原生标题栏颜色 + 主题模式
|
|
func setWindowTitleBar(hwnd uintptr, color uint32, isDark bool) {
|
|
w32.SetTheme(hwnd, isDark)
|
|
w32.SetTitleBarColour(hwnd, color)
|
|
}
|
|
|
|
// resolveFolderPaths 解析特殊文件夹路径
|
|
func resolveFolderPaths(homeDir string) map[string]string {
|
|
paths := make(map[string]string)
|
|
folderGUIDs := map[string]string{
|
|
"desktop": "{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}",
|
|
"documents": "{D20B4C7F-5EA7-424C-B25E-039F6F1FCC8A}",
|
|
"downloads": "{374DE290-123F-4565-9164-39C4925E467B}",
|
|
}
|
|
for name, guid := range folderGUIDs {
|
|
if p := getWindowsSpecialFolder(guid); p != "" {
|
|
paths[name] = p
|
|
} else {
|
|
paths[name] = filepath.Join(homeDir, strings.ToUpper(name[:1])+name[1:])
|
|
}
|
|
}
|
|
for k, v := range getWindowsDrivePaths() {
|
|
paths["root_"+k] = v
|
|
}
|
|
return paths
|
|
}
|