Skip to content

Commit

Permalink
Merge pull request #27 from lchudinov/feature/detect-start-menu-and-d…
Browse files Browse the repository at this point in the history
…esktop-folders-using-known-folders

Detect Start Menu and Desktop folders using Known Folders
  • Loading branch information
hrensink committed Aug 11, 2020
2 parents 87f47c4 + b93639f commit e0b93c0
Showing 1 changed file with 26 additions and 9 deletions.
35 changes: 26 additions & 9 deletions utils/utils_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (
"github.com/go-ole/go-ole/oleutil"
"github.com/golang/freetype/truetype"
"golang.org/x/image/font"
"golang.org/x/sys/windows"
"golang.org/x/sys/windows/registry"

"github.com/pkg/errors"
Expand Down Expand Up @@ -190,20 +191,26 @@ func CreateDesktopShortcut(src, title, description, iconSrc string, arguments ..
err = errors.Wrapf(err, "unable to create a desktop shortcut for %v with title %s", arguments, title)
}
}()
homeDir := os.Getenv("USERPROFILE")
desktopFolder := filepath.Join(homeDir, "Desktop")
desktopFolder, err := GetDesktopFolder()
if err != nil {
return err
}
err = CreateShortcut(src, desktopFolder, title, description, iconSrc, arguments...)
return nil
}

func CreateStartMenuShortcut(src, folder, title, description, iconSrc string, arguments ...string) error {
var err error
var programsDir string
defer func() {
if err != nil {
err = errors.Wrapf(err, "unable to create a Start Menu shortcut for %v with title %s", arguments, title)
}
}()
programsDir := getProgramsStartMenuDir()
programsDir, err = getProgramsStartMenuDir()
if err != nil {
return err
}
dir := filepath.Join(programsDir, folder)
if _, err = os.Stat(dir); os.IsNotExist(err) {
err = os.MkdirAll(dir, 0755)
Expand Down Expand Up @@ -281,13 +288,16 @@ func prepareShortcutArguments(arguments ...string) string {

func RemoveDesktopShortcut(title string) error {
var err error
var desktopFolder string
defer func() {
if err != nil {
err = errors.Wrapf(err, "unable to remove desktop shortcut %s ", title)
}
}()
homeDir := os.Getenv("USERPROFILE")
desktopFolder := filepath.Join(homeDir, "Desktop")
desktopFolder, err = GetDesktopFolder()
if err != nil {
return err
}
link := filepath.Join(desktopFolder, title+".lnk")
if _, err = os.Stat(link); os.IsNotExist(err) {
return nil
Expand All @@ -297,22 +307,29 @@ func RemoveDesktopShortcut(title string) error {

func RemoveStartMenuFolder(folder string) error {
var err error
var programsDir string
defer func() {
if err != nil {
err = errors.Wrapf(err, "unable to remove Start Menu folder %s", folder)
}
}()
programsDir := getProgramsStartMenuDir()
programsDir, err = getProgramsStartMenuDir()
if err != nil {
return err
}
dir := filepath.Join(programsDir, folder)
if _, err = os.Stat(dir); os.IsNotExist(err) {
return nil
}
return os.RemoveAll(dir)
}

func getProgramsStartMenuDir() string {
appDataDir := os.Getenv("APPDATA")
return filepath.Join(appDataDir, "Microsoft", "Windows", "Start Menu", "Programs")
func getProgramsStartMenuDir() (string, error) {
return windows.KnownFolderPath(windows.FOLDERID_Programs, 0)
}

func GetDesktopFolder() (string, error) {
return windows.KnownFolderPath(windows.FOLDERID_Desktop, 0)
}

var (
Expand Down

0 comments on commit e0b93c0

Please sign in to comment.