add more functions
This commit is contained in:
parent
0959dfb96a
commit
03b79c4247
17
kernel32.go
17
kernel32.go
@ -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
|
||||
}
|
||||
|
||||
88
user32.go
88
user32.go
@ -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
|
||||
}
|
||||
|
||||
@ -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
|
||||
)
|
||||
|
||||
@ -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 {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user