获取 Windows 的系统默认目录 Windows 系统目录函数请参考 MSDN:[链接] package main import ( 'fmt' 'syscall' 'unsafe' ) var ( shell = syscall.MustLoadDLL('Shell32.dll') getFolderPath = ..

golang syscall 例子

本贴最后更新于 1447 天前,其中的信息可能已经时异事殊

获取 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
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    337 引用 • 1179 回帖 • 722 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    139 引用 • 379 回帖
回帖
请输入回帖内容...