获取 Windows 的系统默认目录
Windows 系统目录函数请参考 MSDN:https://msdn.microsoft.com/en-us/library/windows/desktop/bb762181%28v=vs.85%29.aspx
package main
import (
"fmt"
"syscall"
"unsafe"
)
var (
shell = syscall.MustLoadDLL("Shell32.dll")
getFolderPath = shell.MustFindProc("SHGetFolderPathW")
)
const (
CSIDL_DESKTOP = 0 //用户桌面默认目录
CSIDL_APPDATA = 26 //用户AppData目录
)
func main() {
b := make([]uint16, syscall.MAX_PATH)
// https://msdn.microsoft.com/en-us/library/windows/desktop/bb762181%28v=vs.85%29.aspx
// 这里第二个参数CSIDL_A必须定义为const,否则编译报错
r, _, err := getFolderPath.Call(0, CSIDL_DESKTOP, 0, 0, uintptr(unsafe.Pointer(&b[0])))
if uint32(r) != 0 {
fmt.Sprintf("获取DIR错误:", err)
}
a_dir := syscall.UTF16ToString(b)
r, _, err = getFolderPath.Call(0, CSIDL_APPDATA, 0, 0, uintptr(unsafe.Pointer(&b[0])))
if uint32(r) != 0 {
fmt.Sprintf("获取DIR错误:", err)
}
b_dir := syscall.UTF16ToString(b)
fmt.Printf("目录ID:%d 目录地址:%s\n", CSIDL_DESKTOP, a_dir)
fmt.Printf("目录ID:%d 目录地址:%s\n", CSIDL_APPDATA, b_dir)
}
💬 SHGetFolderPathW 的第二个参数必须定义为 const,否则编译不过
输出
目录ID:0 目录地址:C:\Users\kuuyee\Desktop
目录ID:26 目录地址:C:\Users\kuuyee\AppData\Roaming
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于