前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Golang语言 syscall 例子

Golang语言 syscall 例子

作者头像
李海彬
发布2018-03-21 11:20:09
1.6K0
发布2018-03-21 11:20:09
举报
文章被收录于专栏:Golang语言社区Golang语言社区

获取Windows的系统默认目录

Windows系统目录函数请参考MSDN:https://msdn.microsoft.com/en-us/library/windows/desktop/bb762181%28v=vs.85%29.aspx

代码语言:javascript
复制
package mainimport (    "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,否则编译不过

输出

代码语言:javascript
复制
目录ID:0  目录地址:C:\Users\kuuyee\Desktop
目录ID:26  目录地址:C:\Users\kuuyee\AppData\Roaming
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-05-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 获取Windows的系统默认目录
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档