diff --git a/vcl/types/types_amd64arm.go b/vcl/types/types_amd64.go similarity index 91% rename from vcl/types/types_amd64arm.go rename to vcl/types/types_amd64.go index 6c1a0307..1ff3c2e5 100644 --- a/vcl/types/types_amd64arm.go +++ b/vcl/types/types_amd64.go @@ -6,8 +6,8 @@ // //---------------------------------------- -//go:build amd64 || arm64 -// +build amd64 arm64 +//go:build amd64 +// +build amd64 package types diff --git a/vcl/types/types_arm64.go b/vcl/types/types_arm64.go new file mode 100644 index 00000000..e8db7ced --- /dev/null +++ b/vcl/types/types_arm64.go @@ -0,0 +1,29 @@ +//---------------------------------------- +// +// Copyright © ying32. All Rights Reserved. +// +// Licensed under Apache License 2.0 +// +//---------------------------------------- + +//go:build arm64 +// +build arm64 + +package types + +type TDWordFiller struct { + Filler [4]uint8 +} + +// TWMKey +type TWMKey struct { + Msg uint32 + MsgFiller TDWordFiller + CharCode [2]uint16 + // CharCode: Word; + // Unused: Word; + CharCodeUnusedFiller TDWordFiller + KeyData uint32 + KeyDataFiller TDWordFiller + Result uintptr +} diff --git a/vcl/win/const_arm64.go b/vcl/win/const_arm64.go new file mode 100644 index 00000000..f8e8ef84 --- /dev/null +++ b/vcl/win/const_arm64.go @@ -0,0 +1,20 @@ +//---------------------------------------- +// +// Copyright © ying32. All Rights Reserved. +// +// Licensed under Apache License 2.0 +// +//---------------------------------------- + +package win + +const ( + // SetWindowPos Flags + + HWND_TOPMOST uintptr = 0xffffffffffffffff // -1 + HWND_NOTOPMOST uintptr = 0xfffffffffffffffe // -2 +) + +const ( + INVALID_HANDLE_VALUE uintptr = 0xffffffffffffffff // -1 +) diff --git a/vcl/win/func_arm64.go b/vcl/win/func_arm64.go new file mode 100644 index 00000000..4e570ec1 --- /dev/null +++ b/vcl/win/func_arm64.go @@ -0,0 +1,26 @@ +//---------------------------------------- +// +// Copyright © ying32. All Rights Reserved. +// +// Licensed under Apache License 2.0 +// +//---------------------------------------- + +// +build windows + +package win + +//func ToUInt64(r1, r2 uintptr) uint64 { +// return uint64(r1) +//} +// + +func ToUInt64(r1, r2 uintptr) uint64 { + ret := uint64(r2) + ret = uint64(ret<<32) + uint64(r1) + return ret +} + +func UInt64To(val uint64) (uintptr, uintptr) { + return uintptr(val), 0 +} diff --git a/vcl/win/kernel32dll_arm64.go b/vcl/win/kernel32dll_arm64.go new file mode 100644 index 00000000..322935d6 --- /dev/null +++ b/vcl/win/kernel32dll_arm64.go @@ -0,0 +1,25 @@ +//---------------------------------------- +// +// Copyright © ying32. All Rights Reserved. +// +// Licensed under Apache License 2.0 +// +//---------------------------------------- + +// +build windows + +package win + +import "unsafe" + +// VerSetConditionMask +func VerSetConditionMask(dwlConditionMask uint64, dwTypeBitMask uint32, dwConditionMask uint8) uint64 { + r, _, _ := _VerSetConditionMask.Call(uintptr(dwlConditionMask), uintptr(dwTypeBitMask), uintptr(dwConditionMask)) + return uint64(r) +} + +// VerifyVersionInfo +func VerifyVersionInfo(lpVersionInformation *TOSVersionInfoEx, dwTypeMask uint32, dwlConditionMask uint64) bool { + r, _, _ := _VerifyVersionInfo.Call(uintptr(unsafe.Pointer(lpVersionInformation)), uintptr(dwTypeMask), uintptr(dwlConditionMask)) + return r != 0 +} diff --git a/vcl/win/user32dll_arm64.go b/vcl/win/user32dll_arm64.go new file mode 100644 index 00000000..8d8904a9 --- /dev/null +++ b/vcl/win/user32dll_arm64.go @@ -0,0 +1,35 @@ +//---------------------------------------- +// +// Copyright © ying32. All Rights Reserved. +// +// Licensed under Apache License 2.0 +// +//---------------------------------------- + +// +build windows + +package win + +import ( + . "github.com/ying32/govcl/vcl/types" +) + +var ( + _GetWindowLongPtr = user32dll.NewProc("GetWindowLongPtrW") + _SetWindowLongPtr = user32dll.NewProc("SetWindowLongPtrW") +) + +func WindowFromPoint(point TPoint) HWND { + r, _, _ := _WindowFromPoint.Call(uintptr(ToUInt64(uintptr(point.X), uintptr(point.Y)))) + return HWND(r) +} + +func WindowFromPhysicalPoint(point TPoint) HWND { + r, _, _ := _WindowFromPhysicalPoint.Call(uintptr(ToUInt64(uintptr(point.X), uintptr(point.Y)))) + return HWND(r) +} + +func ChildWindowFromPoint(hWndParent HWND, point TPoint) HWND { + r, _, _ := _ChildWindowFromPoint.Call(uintptr(hWndParent), uintptr(ToUInt64(uintptr(point.X), uintptr(point.Y)))) + return HWND(r) +}