Files
bj_power/bj_power_mes/single.go
T

60 lines
1.1 KiB
Go

package main
import (
"fmt"
"syscall"
"unsafe"
)
var (
modkernel32 = syscall.NewLazyDLL("kernel32.dll")
procCreateMutex = modkernel32.NewProc("CreateMutexW")
procCloseHandle = modkernel32.NewProc("CloseHandle")
user32 = syscall.NewLazyDLL("user32.dll")
procMessageBox = user32.NewProc("MessageBoxW")
)
const MB_OK = 0x00000000
const MB_ICONWARNING = 0x00000030
func MessageBox(title, msg string) {
procMessageBox.Call(
0,
uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(msg))),
uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(title))),
MB_OK|MB_ICONWARNING,
)
}
var ErrAlreadyExists = fmt.Errorf("程序已在运行")
func createMutex(name string) (uintptr, error) {
n, _ := syscall.UTF16PtrFromString(name)
r, _, err := procCreateMutex.Call(
0,
0,
uintptr(unsafe.Pointer(n)),
)
if r == 0 {
return 0, err
}
if errno, ok := err.(syscall.Errno); ok && errno == 183 { // ERROR_ALREADY_EXISTS
return 0, ErrAlreadyExists
}
return r, nil
}
func lock() {
mutex, err := createMutex("back_cover_mutex")
if err != nil {
fmt.Println(err)
return
}
defer procCloseHandle.Call(mutex)
}