- 互斥体防多开/ShellExecute/窗口类名与标题查询/顶层窗口目录, 新增依赖 lxn/win - 仅 Windows, 附测试、examples/dll 例程与包 README
40 lines
1.0 KiB
Go
40 lines
1.0 KiB
Go
// dll 包示例:Windows API 调用(互斥体防多开、ShellExecute、创建进程、窗口文本)
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"syscall"
|
|
|
|
"git.zeroonesoft.cn/golib/zogo/dll"
|
|
)
|
|
|
|
func main() {
|
|
// 创建命名互斥体(常用于防止程序多开)
|
|
handle, err := dll.CreateMutex(false, "go-hua-example-mutex")
|
|
if err != nil {
|
|
fmt.Println("CreateMutex 失败(可能已存在):", err)
|
|
} else {
|
|
fmt.Println("CreateMutex 成功, 句柄:", handle)
|
|
}
|
|
|
|
// 打开已存在的互斥体
|
|
h2, err := dll.OpenMutex(false, "go-hua-example-mutex")
|
|
fmt.Println("OpenMutex:", h2, "错误:", err)
|
|
|
|
if handle != 0 {
|
|
fmt.Println("ReleaseMutex:", dll.ReleaseMutex(handle))
|
|
_ = syscall.CloseHandle(handle)
|
|
}
|
|
|
|
// 以下功能会产生可见窗口,按需取消注释:
|
|
//
|
|
// 用系统默认程序打开网页/文件:
|
|
// dll.ShellExecute("", "https://github.com", "", false)
|
|
//
|
|
// 创建进程(打开记事本):
|
|
// dll.CreateProcess()
|
|
//
|
|
// 获取资源管理器当前打开的顶层路径:
|
|
// path, err := dll.GetTopFolderPath()
|
|
}
|