[v3 plugins] Support single-instance on Windows

This commit is contained in:
Lea Anthony
2023-06-06 21:06:52 +10:00
parent 4ee75e93c9
commit 3b0a57ca6d
2 changed files with 44 additions and 0 deletions
@@ -0,0 +1,35 @@
//go:build windows
package single_instance
import (
"github.com/wailsapp/wails/v3/pkg/w32"
"syscall"
)
type enumWindowsCallback func(hwnd syscall.Handle, lParam uintptr) uintptr
func enumWindowsProc(hwnd syscall.Handle, lParam uintptr) uintptr {
_, processID := w32.GetWindowThreadProcessId(uintptr(hwnd))
targetProcessID := uint32(lParam)
if uint32(processID) == targetProcessID {
// Bring the window forward
w32.SetForegroundWindow(w32.HWND(hwnd))
println("Found window: ", hwnd)
}
// Continue enumeration
return 1
}
func (p *Plugin) activeInstance(pid int) error {
// Get the window associated with the process ID.
targetProcessID := uint32(pid) // Replace with the desired process ID
w32.EnumWindows(
syscall.NewCallback(enumWindowsCallback(enumWindowsProc)),
uintptr(targetProcessID),
)
return nil
}