add more functions

This commit is contained in:
兔子 2025-11-07 22:37:37 +08:00
parent 0959dfb96a
commit 03b79c4247
Signed by: b612
GPG Key ID: 99DD2222B612B612
4 changed files with 129 additions and 2 deletions

View File

@ -399,3 +399,20 @@ func RtlMoveMemory(Destination, Source unsafe.Pointer, Length uintptr) error {
}
return nil
}
func GetModuleHandle(lpModuleName *uint16) (HINSTANCE, error) {
kernel32, err := syscall.LoadLibrary("kernel32.dll")
if err != nil {
return 0, err
}
defer syscall.FreeLibrary(kernel32)
proc, err := syscall.GetProcAddress(syscall.Handle(kernel32), "GetModuleHandleW")
if err != nil {
return 0, err
}
r, _, err := syscall.Syscall(proc, 1, uintptr(unsafe.Pointer(lpModuleName)), 0, 0)
if r == 0 {
return 0, err
}
return HINSTANCE(r), nil
}

View File

@ -356,7 +356,7 @@ func CreateWindowEx(dwExStyle DWORD, lpClassName, lpWindowName string, dwStyle D
return HWND(r), nil
}
func DestoryWindow(hWnd HWND) (bool, error) {
func DestroyWindow(hWnd HWND) (bool, error) {
user32, err := syscall.LoadLibrary("user32.dll")
if err != nil {
return false, errors.New("Can't Load User32 API")
@ -386,3 +386,89 @@ func GetMessage(lpMsg *MSG, hWnd HWND, wMsgFilterMin, wMsgFilterMax DWORD) (DWOR
}
return DWORD(r), nil
}
func TranslateMessage(lpMsg *MSG) (bool, error) {
user32, err := syscall.LoadLibrary("user32.dll")
if err != nil {
return false, err
}
defer syscall.FreeLibrary(user32)
proc, err := syscall.GetProcAddress(syscall.Handle(user32), "TranslateMessage")
if err != nil {
return false, err
}
r, _, _ := syscall.Syscall(proc, 1, uintptr(unsafe.Pointer(lpMsg)), 0, 0)
return r != 0, nil
}
func DispatchMessage(lpMsg *MSG) (LRESULT, error) {
user32, err := syscall.LoadLibrary("user32.dll")
if err != nil {
return 0, err
}
defer syscall.FreeLibrary(user32)
proc, err := syscall.GetProcAddress(syscall.Handle(user32), "DispatchMessageW")
if err != nil {
return 0, err
}
r, _, err := syscall.Syscall(proc, 1, uintptr(unsafe.Pointer(lpMsg)), 0, 0)
return LRESULT(r), err
}
func DefWindowProc(hWnd HWND, uMsg UINT, wParam WPARAM, lParam LPARAM) LRESULT {
user32, err := syscall.LoadLibrary("user32.dll")
if err != nil {
return 0
}
defer syscall.FreeLibrary(user32)
proc, err := syscall.GetProcAddress(syscall.Handle(user32), "DefWindowProcW")
if err != nil {
return 0
}
r, _, _ := syscall.Syscall6(proc, 4, uintptr(hWnd), uintptr(uMsg), uintptr(wParam), uintptr(lParam), 0, 0)
return LRESULT(r)
}
func PostMessage(hWnd HWND, msg UINT, wParam WPARAM, lParam LPARAM) (bool, error) {
user32, err := syscall.LoadLibrary("user32.dll")
if err != nil {
return false, err
}
defer syscall.FreeLibrary(user32)
proc, err := syscall.GetProcAddress(syscall.Handle(user32), "PostMessageW")
if err != nil {
return false, err
}
r, _, _ := syscall.Syscall6(proc, 4, uintptr(hWnd), uintptr(msg), uintptr(wParam), uintptr(lParam), 0, 0)
return r != 0, nil
}
func PostQuitMessage(nExitCode int) {
user32, err := syscall.LoadLibrary("user32.dll")
if err != nil {
return
}
defer syscall.FreeLibrary(user32)
proc, err := syscall.GetProcAddress(syscall.Handle(user32), "PostQuitMessage")
if err != nil {
return
}
syscall.Syscall(proc, 1, uintptr(nExitCode), 0, 0)
}
func RegisterClassEx(lpWndClass *WNDCLASSEX) (uint16, error) {
user32, err := syscall.LoadLibrary("user32.dll")
if err != nil {
return 0, err
}
defer syscall.FreeLibrary(user32)
proc, err := syscall.GetProcAddress(syscall.Handle(user32), "RegisterClassExW")
if err != nil {
return 0, err
}
r, _, err := syscall.Syscall(proc, 1, uintptr(unsafe.Pointer(lpWndClass)), 0, 0)
if r == 0 {
return 0, err
}
return uint16(r), nil
}

View File

@ -224,7 +224,26 @@ type MSG struct {
type POINT struct {
X, Y int32
}
type WNDCLASSEX struct {
CbSize UINT
Style uint32
LpfnWndProc uintptr
CbClsExtra int32
CbWndExtra int32
HInstance HINSTANCE
HIcon HICON
HCursor HCURSOR
HbrBackground HBRUSH
LpszMenuName *uint16
LpszClassName *uint16
HIconSm HICON
}
const (
WM_CLIPBOARDUPDATE DWORD = 0x031D
CS_HREDRAW = 0x0002
CS_VREDRAW = 0x0001
CW_USEDEFAULT = 0x80000000
WM_CLIPBOARDUPDATE = 0x031D
WM_QUIT = 0x0012
WM_DESTROY = 0x0002
)

View File

@ -4,6 +4,10 @@ import (
"unsafe"
)
const (
WM_USER UINT = 0x0400
)
type (
ATOM uint16
BOOL int32
@ -62,6 +66,7 @@ type (
USN int64
LARGE_INTEGER LONGLONG
LONGLONG int64
UINT uint32
)
type WTS_SESSION_INFO struct {