mirror of
https://github.com/rwinkhart/sys.git
synced 2026-09-06 09:07:16 -04:00
windows: add window handle related system calls
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-enumwindows https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-enumchildwindows https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getclassnamew https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getdesktopwindow https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getforegroundwindow https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-iswindow https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-iswindowunicode https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-iswindowvisible https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getguithreadinfo Change-Id: I21fbf47e1f459e86503e0e876b44cf47c98b2aa0 GitHub-Last-Rev: 242b79ffb8cbfe7b3359e35379fa3227a70fc0f1 GitHub-Pull-Request: golang/sys#122 Reviewed-on: https://go-review.googlesource.com/c/sys/+/399134 Auto-Submit: Alex Brainman <alex.brainman@gmail.com> Reviewed-by: Benny Siegert <bsiegert@gmail.com> Reviewed-by: Than McIntosh <thanm@google.com> Reviewed-by: Alex Brainman <alex.brainman@gmail.com> Run-TryBot: Alex Brainman <alex.brainman@gmail.com> TryBot-Result: Gopher Robot <gobot@golang.org>
This commit is contained in:
committed by
Gopher Robot
parent
aba9fc2a8f
commit
3275c407ce
@@ -364,6 +364,15 @@ func NewCallbackCDecl(fn interface{}) uintptr {
|
|||||||
//sys SetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error)
|
//sys SetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error)
|
||||||
//sys GetActiveProcessorCount(groupNumber uint16) (ret uint32)
|
//sys GetActiveProcessorCount(groupNumber uint16) (ret uint32)
|
||||||
//sys GetMaximumProcessorCount(groupNumber uint16) (ret uint32)
|
//sys GetMaximumProcessorCount(groupNumber uint16) (ret uint32)
|
||||||
|
//sys EnumWindows(enumFunc uintptr, param unsafe.Pointer) (err error) = user32.EnumWindows
|
||||||
|
//sys EnumChildWindows(hwnd HWND, enumFunc uintptr, param unsafe.Pointer) = user32.EnumChildWindows
|
||||||
|
//sys GetClassName(hwnd HWND, className *uint16, maxCount int32) (copied int32, err error) = user32.GetClassNameW
|
||||||
|
//sys GetDesktopWindow() (hwnd HWND) = user32.GetDesktopWindow
|
||||||
|
//sys GetForegroundWindow() (hwnd HWND) = user32.GetForegroundWindow
|
||||||
|
//sys IsWindow(hwnd HWND) (isWindow bool) = user32.IsWindow
|
||||||
|
//sys IsWindowUnicode(hwnd HWND) (isUnicode bool) = user32.IsWindowUnicode
|
||||||
|
//sys IsWindowVisible(hwnd HWND) (isVisible bool) = user32.IsWindowVisible
|
||||||
|
//sys GetGUIThreadInfo(thread uint32, info *GUIThreadInfo) (err error) = user32.GetGUIThreadInfo
|
||||||
|
|
||||||
// Volume Management Functions
|
// Volume Management Functions
|
||||||
//sys DefineDosDevice(flags uint32, deviceName *uint16, targetPath *uint16) (err error) = DefineDosDeviceW
|
//sys DefineDosDevice(flags uint32, deviceName *uint16, targetPath *uint16) (err error) = DefineDosDeviceW
|
||||||
|
|||||||
@@ -3213,3 +3213,22 @@ type ModuleInfo struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const ALL_PROCESSOR_GROUPS = 0xFFFF
|
const ALL_PROCESSOR_GROUPS = 0xFFFF
|
||||||
|
|
||||||
|
type Rect struct {
|
||||||
|
Left int32
|
||||||
|
Top int32
|
||||||
|
Right int32
|
||||||
|
Bottom int32
|
||||||
|
}
|
||||||
|
|
||||||
|
type GUIThreadInfo struct {
|
||||||
|
Size uint32
|
||||||
|
Flags uint32
|
||||||
|
Active HWND
|
||||||
|
Focus HWND
|
||||||
|
Capture HWND
|
||||||
|
MenuOwner HWND
|
||||||
|
MoveSize HWND
|
||||||
|
CaretHandle HWND
|
||||||
|
CaretRect Rect
|
||||||
|
}
|
||||||
|
|||||||
@@ -444,9 +444,18 @@ var (
|
|||||||
procCommandLineToArgvW = modshell32.NewProc("CommandLineToArgvW")
|
procCommandLineToArgvW = modshell32.NewProc("CommandLineToArgvW")
|
||||||
procSHGetKnownFolderPath = modshell32.NewProc("SHGetKnownFolderPath")
|
procSHGetKnownFolderPath = modshell32.NewProc("SHGetKnownFolderPath")
|
||||||
procShellExecuteW = modshell32.NewProc("ShellExecuteW")
|
procShellExecuteW = modshell32.NewProc("ShellExecuteW")
|
||||||
|
procEnumChildWindows = moduser32.NewProc("EnumChildWindows")
|
||||||
|
procEnumWindows = moduser32.NewProc("EnumWindows")
|
||||||
procExitWindowsEx = moduser32.NewProc("ExitWindowsEx")
|
procExitWindowsEx = moduser32.NewProc("ExitWindowsEx")
|
||||||
|
procGetClassNameW = moduser32.NewProc("GetClassNameW")
|
||||||
|
procGetDesktopWindow = moduser32.NewProc("GetDesktopWindow")
|
||||||
|
procGetForegroundWindow = moduser32.NewProc("GetForegroundWindow")
|
||||||
|
procGetGUIThreadInfo = moduser32.NewProc("GetGUIThreadInfo")
|
||||||
procGetShellWindow = moduser32.NewProc("GetShellWindow")
|
procGetShellWindow = moduser32.NewProc("GetShellWindow")
|
||||||
procGetWindowThreadProcessId = moduser32.NewProc("GetWindowThreadProcessId")
|
procGetWindowThreadProcessId = moduser32.NewProc("GetWindowThreadProcessId")
|
||||||
|
procIsWindow = moduser32.NewProc("IsWindow")
|
||||||
|
procIsWindowUnicode = moduser32.NewProc("IsWindowUnicode")
|
||||||
|
procIsWindowVisible = moduser32.NewProc("IsWindowVisible")
|
||||||
procMessageBoxW = moduser32.NewProc("MessageBoxW")
|
procMessageBoxW = moduser32.NewProc("MessageBoxW")
|
||||||
procCreateEnvironmentBlock = moduserenv.NewProc("CreateEnvironmentBlock")
|
procCreateEnvironmentBlock = moduserenv.NewProc("CreateEnvironmentBlock")
|
||||||
procDestroyEnvironmentBlock = moduserenv.NewProc("DestroyEnvironmentBlock")
|
procDestroyEnvironmentBlock = moduserenv.NewProc("DestroyEnvironmentBlock")
|
||||||
@@ -3802,6 +3811,19 @@ func ShellExecute(hwnd Handle, verb *uint16, file *uint16, args *uint16, cwd *ui
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func EnumChildWindows(hwnd HWND, enumFunc uintptr, param unsafe.Pointer) {
|
||||||
|
syscall.Syscall(procEnumChildWindows.Addr(), 3, uintptr(hwnd), uintptr(enumFunc), uintptr(param))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func EnumWindows(enumFunc uintptr, param unsafe.Pointer) (err error) {
|
||||||
|
r1, _, e1 := syscall.Syscall(procEnumWindows.Addr(), 2, uintptr(enumFunc), uintptr(param), 0)
|
||||||
|
if r1 == 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func ExitWindowsEx(flags uint32, reason uint32) (err error) {
|
func ExitWindowsEx(flags uint32, reason uint32) (err error) {
|
||||||
r1, _, e1 := syscall.Syscall(procExitWindowsEx.Addr(), 2, uintptr(flags), uintptr(reason), 0)
|
r1, _, e1 := syscall.Syscall(procExitWindowsEx.Addr(), 2, uintptr(flags), uintptr(reason), 0)
|
||||||
if r1 == 0 {
|
if r1 == 0 {
|
||||||
@@ -3810,6 +3832,35 @@ func ExitWindowsEx(flags uint32, reason uint32) (err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetClassName(hwnd HWND, className *uint16, maxCount int32) (copied int32, err error) {
|
||||||
|
r0, _, e1 := syscall.Syscall(procGetClassNameW.Addr(), 3, uintptr(hwnd), uintptr(unsafe.Pointer(className)), uintptr(maxCount))
|
||||||
|
copied = int32(r0)
|
||||||
|
if copied == 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetDesktopWindow() (hwnd HWND) {
|
||||||
|
r0, _, _ := syscall.Syscall(procGetDesktopWindow.Addr(), 0, 0, 0, 0)
|
||||||
|
hwnd = HWND(r0)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetForegroundWindow() (hwnd HWND) {
|
||||||
|
r0, _, _ := syscall.Syscall(procGetForegroundWindow.Addr(), 0, 0, 0, 0)
|
||||||
|
hwnd = HWND(r0)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetGUIThreadInfo(thread uint32, info *GUIThreadInfo) (err error) {
|
||||||
|
r1, _, e1 := syscall.Syscall(procGetGUIThreadInfo.Addr(), 2, uintptr(thread), uintptr(unsafe.Pointer(info)), 0)
|
||||||
|
if r1 == 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func GetShellWindow() (shellWindow HWND) {
|
func GetShellWindow() (shellWindow HWND) {
|
||||||
r0, _, _ := syscall.Syscall(procGetShellWindow.Addr(), 0, 0, 0, 0)
|
r0, _, _ := syscall.Syscall(procGetShellWindow.Addr(), 0, 0, 0, 0)
|
||||||
shellWindow = HWND(r0)
|
shellWindow = HWND(r0)
|
||||||
@@ -3825,6 +3876,24 @@ func GetWindowThreadProcessId(hwnd HWND, pid *uint32) (tid uint32, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func IsWindow(hwnd HWND) (isWindow bool) {
|
||||||
|
r0, _, _ := syscall.Syscall(procIsWindow.Addr(), 1, uintptr(hwnd), 0, 0)
|
||||||
|
isWindow = r0 != 0
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func IsWindowUnicode(hwnd HWND) (isUnicode bool) {
|
||||||
|
r0, _, _ := syscall.Syscall(procIsWindowUnicode.Addr(), 1, uintptr(hwnd), 0, 0)
|
||||||
|
isUnicode = r0 != 0
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func IsWindowVisible(hwnd HWND) (isVisible bool) {
|
||||||
|
r0, _, _ := syscall.Syscall(procIsWindowVisible.Addr(), 1, uintptr(hwnd), 0, 0)
|
||||||
|
isVisible = r0 != 0
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func MessageBox(hwnd HWND, 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)
|
r0, _, e1 := syscall.Syscall6(procMessageBoxW.Addr(), 4, uintptr(hwnd), uintptr(unsafe.Pointer(text)), uintptr(unsafe.Pointer(caption)), uintptr(boxtype), 0, 0)
|
||||||
ret = int32(r0)
|
ret = int32(r0)
|
||||||
|
|||||||
Reference in New Issue
Block a user