dongxian6715 2013-07-30 11:50
浏览 668
已采纳

调用Windows函数(获取字体目录)

I try to find out the font folder on a windows installation. AFAICS the proposed way is to call SHGetKnownFolderPath in Shell32.dll with KNOWNFOLDERID set to FOLDERID_Fonts.

I have no idea what to pass to the Call function in the code below:

package main

import (
    "syscall"
)

func main() {
    // HRESULT SHGetKnownFolderPath(
    //   _In_      REFKNOWNFOLDERID rfid,
    //   _In_      DWORD dwFlags,
    //   _In_opt_  HANDLE hToken,
    //   _Out_     PWSTR *ppszPath
    // );

    var (
        shell32             = syscall.NewLazyDLL("Shell32.dll")
        shGetKnowFolderPath = shell32.NewProc("SHGetKnownFolderPath")

        // Doesn't work, of course:
        folderId int
        flags    int
        handle   int
        retval   int
    )

    shGetKnowFolderPath.Call(uintptr(folderId), uintptr(flags), uintptr(handle), uintptr(retval))
}

Any idea? (I guess a workaround for now would be to stick to %windir%\Fonts, but I'd like to get a proper solution).

References:

  • 写回答

4条回答

  • duanpa1898 2019-09-19 21:54
    关注

    golang.org/x/sys/windows now has a wrapper for SHGetKnownFolderPath, so this is much easier:

    package main
    
    import (
        "fmt"
    
        "golang.org/x/sys/windows"
    )
    
    func main() {
        path, err := windows.KnownFolderPath(windows.FOLDERID_Fonts, 0)
        if err != nil {
            fmt.Println(err)
            return
        }
        fmt.Println(path)
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图2.0 版本点聚合中Marker的位置无法实时更新,如何解决呢?
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题