init
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"os/exec"
|
||||
"strings"
|
||||
|
||||
"github.com/pkg/browser"
|
||||
"golang.org/x/sys/windows/registry"
|
||||
)
|
||||
|
||||
func getDefaultProgram(fileExtension string) (string, error) {
|
||||
key, err := registry.OpenKey(registry.CLASSES_ROOT, fmt.Sprintf(`.%s`, fileExtension), registry.QUERY_VALUE)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
defer key.Close()
|
||||
|
||||
// 读取默认程序关联值
|
||||
defaultProgram, _, err := key.GetStringValue("")
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return defaultProgram, nil
|
||||
}
|
||||
|
||||
func hasDefaultProgram(fileExtension string) bool {
|
||||
prog, err := getDefaultProgram(fileExtension)
|
||||
if err != nil {
|
||||
log.Println("getDefaultProgram Error:", err)
|
||||
return false
|
||||
}
|
||||
|
||||
if prog == "" {
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func OpenFileOrExplorer(filePath string, explorer bool) error {
|
||||
if _, err := os.Stat(filePath); err != nil {
|
||||
log.Printf("%s %v\n", filePath, err)
|
||||
return err
|
||||
}
|
||||
|
||||
canOpen := false
|
||||
fileExtension := ""
|
||||
index := strings.LastIndex(filePath, ".")
|
||||
if index > 0 {
|
||||
fileExtension = filePath[index+1:]
|
||||
canOpen = hasDefaultProgram(fileExtension)
|
||||
}
|
||||
|
||||
if canOpen && !explorer {
|
||||
return browser.OpenFile(filePath)
|
||||
}
|
||||
|
||||
commandArgs := []string{"/select,", filePath}
|
||||
fmt.Println("cmd:", "explorer", commandArgs)
|
||||
|
||||
// 创建一个Cmd结构体表示要执行的命令
|
||||
cmd := exec.Command("explorer", commandArgs...)
|
||||
|
||||
// 执行命令并等待它完成
|
||||
err := cmd.Run()
|
||||
if err != nil {
|
||||
log.Printf("Error executing command: %s\n", err)
|
||||
// return err
|
||||
}
|
||||
|
||||
fmt.Println("Command executed successfully")
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user