From 59c308dcf3cce479e66405f7f4ed446c39cbe82d Mon Sep 17 00:00:00 2001 From: Alex Brainman Date: Mon, 11 Jan 2021 16:46:25 +1100 Subject: [PATCH] windows: use HWND type in MessageBox, GetShellWindow and GetWindowThreadProcessId This matches usual win32api conventions. While we're at it, we group together user32.dll functions together. This CL was based on CL 282634 with all but MessageBox, GetShellWindow and GetWindowThreadProcessId changes removed to prevent compatibility break. Change-Id: I7e17c581723c41580a49c5612cabc7a5c13c0f15 Reviewed-on: https://go-review.googlesource.com/c/sys/+/282972 Run-TryBot: Alex Brainman TryBot-Result: Go Bot Reviewed-by: Brad Fitzpatrick Trust: Alex Brainman --- windows/syscall_windows.go | 9 +++++---- windows/zsyscall_windows.go | 10 +++++----- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/windows/syscall_windows.go b/windows/syscall_windows.go index 38344590..d249919c 100644 --- a/windows/syscall_windows.go +++ b/windows/syscall_windows.go @@ -18,6 +18,7 @@ import ( ) type Handle uintptr +type HWND uintptr const ( InvalidHandle = ^Handle(0) @@ -213,9 +214,11 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys CancelIoEx(s Handle, o *Overlapped) (err error) //sys CreateProcess(appName *uint16, commandLine *uint16, procSecurity *SecurityAttributes, threadSecurity *SecurityAttributes, inheritHandles bool, creationFlags uint32, env *uint16, currentDir *uint16, startupInfo *StartupInfo, outProcInfo *ProcessInformation) (err error) = CreateProcessW //sys OpenProcess(desiredAccess uint32, inheritHandle bool, processId uint32) (handle Handle, err error) -//sys GetWindowThreadProcessId(wnd uintptr, pid *uint32) (tid uint32) = user32.GetWindowThreadProcessId -//sys GetShellWindow() (desktopWindow uintptr) = user32.GetShellWindow //sys ShellExecute(hwnd Handle, verb *uint16, file *uint16, args *uint16, cwd *uint16, showCmd int32) (err error) [failretval<=32] = shell32.ShellExecuteW +//sys GetWindowThreadProcessId(hwnd HWND, pid *uint32) (tid uint32) = user32.GetWindowThreadProcessId +//sys GetShellWindow() (shellWindow HWND) = user32.GetShellWindow +//sys MessageBox(hwnd HWND, text *uint16, caption *uint16, boxtype uint32) (ret int32, err error) [failretval==0] = user32.MessageBoxW +//sys ExitWindowsEx(flags uint32, reason uint32) (err error) = user32.ExitWindowsEx //sys shGetKnownFolderPath(id *KNOWNFOLDERID, flags uint32, token Token, path **uint16) (ret error) = shell32.SHGetKnownFolderPath //sys TerminateProcess(handle Handle, exitcode uint32) (err error) //sys GetExitCodeProcess(handle Handle, exitcode *uint32) (err error) @@ -346,8 +349,6 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys QueryDosDevice(deviceName *uint16, targetPath *uint16, max uint32) (n uint32, err error) [failretval==0] = QueryDosDeviceW //sys SetVolumeLabel(rootPathName *uint16, volumeName *uint16) (err error) = SetVolumeLabelW //sys SetVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint16) (err error) = SetVolumeMountPointW -//sys MessageBox(hwnd Handle, text *uint16, caption *uint16, boxtype uint32) (ret int32, err error) [failretval==0] = user32.MessageBoxW -//sys ExitWindowsEx(flags uint32, reason uint32) (err error) = user32.ExitWindowsEx //sys InitiateSystemShutdownEx(machineName *uint16, message *uint16, timeout uint32, forceAppsClosed bool, rebootAfterShutdown bool, reason uint32) (err error) = advapi32.InitiateSystemShutdownExW //sys SetProcessShutdownParameters(level uint32, flags uint32) (err error) = kernel32.SetProcessShutdownParameters //sys GetProcessShutdownParameters(level *uint32, flags *uint32) (err error) = kernel32.GetProcessShutdownParameters diff --git a/windows/zsyscall_windows.go b/windows/zsyscall_windows.go index 06273735..cd5e8528 100644 --- a/windows/zsyscall_windows.go +++ b/windows/zsyscall_windows.go @@ -2898,19 +2898,19 @@ func ExitWindowsEx(flags uint32, reason uint32) (err error) { return } -func GetShellWindow() (desktopWindow uintptr) { +func GetShellWindow() (shellWindow HWND) { r0, _, _ := syscall.Syscall(procGetShellWindow.Addr(), 0, 0, 0, 0) - desktopWindow = uintptr(r0) + shellWindow = HWND(r0) return } -func GetWindowThreadProcessId(wnd uintptr, pid *uint32) (tid uint32) { - r0, _, _ := syscall.Syscall(procGetWindowThreadProcessId.Addr(), 2, uintptr(wnd), uintptr(unsafe.Pointer(pid)), 0) +func GetWindowThreadProcessId(hwnd HWND, pid *uint32) (tid uint32) { + r0, _, _ := syscall.Syscall(procGetWindowThreadProcessId.Addr(), 2, uintptr(hwnd), uintptr(unsafe.Pointer(pid)), 0) tid = uint32(r0) return } -func MessageBox(hwnd Handle, text *uint16, caption *uint16, boxtype uint32) (ret int32, err error) { +func MessageBox(hwnd HWND, text *uint16, caption *uint16, boxtype uint32) (ret int32, err error) { r0, _, e1 := syscall.Syscall6(procMessageBoxW.Addr(), 4, uintptr(hwnd), uintptr(unsafe.Pointer(text)), uintptr(unsafe.Pointer(caption)), uintptr(boxtype), 0, 0) ret = int32(r0) if ret == 0 {