第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Go 中創(chuàng)建 Windows 快捷方式 (.lnk)

在 Go 中創(chuàng)建 Windows 快捷方式 (.lnk)

Go
桃花長相依 2021-11-08 10:22:37
我想在 Golang 中為桌面和開始菜單創(chuàng)建一個 Windows 快捷方式 (.lnk)。我實際上通過gowin模塊獲得了 Desktop & Startmenu 文件夾,我想創(chuàng)建一個指向這些位置的快捷方式。我搜索過,但沒有找到任何 golang 項目。我應(yīng)該創(chuàng)建它嗎?還有其他漂亮的方法嗎?
查看完整描述

3 回答

?
米琪卡哇伊

TA貢獻1998條經(jīng)驗 獲得超6個贊

使用https://github.com/go-ole/go-ole:


ole.CoInitializeEx(0, ole.COINIT_APARTMENTTHREADED|ole.COINIT_SPEED_OVER_MEMORY)

oleShellObject, err := oleutil.CreateObject("WScript.Shell")

if err != nil {

    return err

}

defer oleShellObject.Release()

wshell, err := oleShellObject.QueryInterface(ole.IID_IDispatch)

if err != nil {

    return err

}

defer wshell.Release()

cs, err := oleutil.CallMethod(wshell, "CreateShortcut", dst)

if err != nil {

    return err

}

idispatch := cs.ToIDispatch()

oleutil.PutProperty(idispatch, "TargetPath", src)

oleutil.CallMethod(idispatch, "Save")


查看完整回答
反對 回復(fù) 2021-11-08
?
呼喚遠方

TA貢獻1856條經(jīng)驗 獲得超11個贊

使用 VBS的AWFUL Working golang 解決方案;


package main


import(

    "bytes"

    "fmt"

    "io/ioutil"

    "os"

    "os/exec"

)


func createShortcut(linkName string, target string, arguments string, directory string, description string, destination string) {

    var scriptTxt bytes.Buffer

    scriptTxt.WriteString("option explicit\n\n")

    scriptTxt.WriteString("sub CreateShortCut()\n")

    scriptTxt.WriteString("dim objShell, strDesktopPath, objLink\n")

    scriptTxt.WriteString("set objShell = CreateObject(\"WScript.Shell\")\n")

    scriptTxt.WriteString("strDesktopPath = objShell.SpecialFolders(\"")

    scriptTxt.WriteString(destination)

    scriptTxt.WriteString("\")\n")

    scriptTxt.WriteString("set objLink = objShell.CreateShortcut(strDesktopPath & \"\\")

    scriptTxt.WriteString(linkName)

    scriptTxt.WriteString(".lnk\")\n")

    scriptTxt.WriteString("objLink.Arguments = \"")

    scriptTxt.WriteString(arguments)

    scriptTxt.WriteString("\"\n")

    scriptTxt.WriteString("objLink.Description = \"")

    scriptTxt.WriteString(description)

    scriptTxt.WriteString("\"\n")

    scriptTxt.WriteString("objLink.TargetPath = \"")

    scriptTxt.WriteString(target)

    scriptTxt.WriteString("\"\n")

    scriptTxt.WriteString("objLink.WindowStyle = 1\n")

    scriptTxt.WriteString("objLink.WorkingDirectory = \"")

    scriptTxt.WriteString(directory)

    scriptTxt.WriteString("\"\n")

    scriptTxt.WriteString("objLink.Save\nend sub\n\n")

    scriptTxt.WriteString("call CreateShortCut()")

    fmt.Print(scriptTxt.String())


    filename := fmt.Sprintf("lnkTo%s.vbs", destination)

    ioutil.WriteFile(filename, scriptTxt.Bytes(), 0777)

    cmd := exec.Command("wscript", filename)

    err := cmd.Run()

    if err != nil {

        fmt.Println(err)

    }

    cmd.Wait()

    os.Remove(filename)

    return

}


查看完整回答
反對 回復(fù) 2021-11-08
?
大話西游666

TA貢獻1817條經(jīng)驗 獲得超14個贊

如果出于任何原因您不想使用外部 go 包,這是一種替代方法。正如Alexis Paques所提到的,您可以使用 Powershell 在 Windows 下創(chuàng)建快捷方式。優(yōu)點是,它已經(jīng)在幾乎所有 Windows 環(huán)境中可用。這是在 shell:startup 文件夾中創(chuàng)建快捷方式的實現(xiàn),它將在啟動時為當前用戶自動啟動鏈接程序:


package main


import (

    "bytes"

    "log"

    "os/exec"

    "strings"

)


type PowerShell struct {

    powerShell string

}


var WIN_CREATE_SHORTCUT = `$WshShell = New-Object -comObject WScript.Shell

$Shortcut = $WshShell.CreateShortcut("$HOME\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\MyAPP.lnk")

$Shortcut.TargetPath = "PLACEHOLDER"

$Shortcut.Save()`


// New create new session

func New() *PowerShell {

    ps, _ := exec.LookPath("powershell.exe")

    return &PowerShell{

        powerShell: ps,

    }

}


func (p *PowerShell) execute(args ...string) (stdOut string, stdErr string, err error) {

    args = append([]string{"-NoProfile", "-NonInteractive"}, args...)

    cmd := exec.Command(p.powerShell, args...)


    var stdout bytes.Buffer

    var stderr bytes.Buffer

    cmd.Stdout = &stdout

    cmd.Stderr = &stderr


    err = cmd.Run()

    stdOut, stdErr = stdout.String(), stderr.String()

    return

}


// enableAutostartWin creates a shortcut to MyAPP in the shell:startup folder

func enableAutostartWin() {

    ps := New()

    exec_path := "C:\\MyAPP.exe"

    WIN_CREATE_SHORTCUT = strings.Replace(WIN_CREATE_SHORTCUT, "PLACEHOLDER", exec_path, 1)

    stdOut, stdErr, err := ps.execute(WIN_CREATE_SHORTCUT)

    log.Printf("CreateShortcut:\nStdOut : '%s'\nStdErr: '%s'\nErr: %s",

        strings.TrimSpace(stdOut), stdErr, err)

}

這個答案基于這個 SO answer和這個gist。


查看完整回答
反對 回復(fù) 2021-11-08
  • 3 回答
  • 0 關(guān)注
  • 584 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號