重构: App拆分10域文件+并发安全+结构化日志+依赖升级
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
//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
|
||||
}
|
||||
Reference in New Issue
Block a user