From 7e2261bca5be82b0b8b39e652118abb4466a881c Mon Sep 17 00:00:00 2001 From: 兔子 Date: Mon, 19 Oct 2020 21:14:49 +0800 Subject: [PATCH] add new api --- kernel32.go | 33 +++++++++ kernel32typedef.go | 12 +++ user32.go | 49 ++++++++++++ user32_typedef.go | 180 +++++++++++++++++++++++++++++++++++++++++++++ win32api.go | 1 + 5 files changed, 275 insertions(+) create mode 100644 user32.go create mode 100644 user32_typedef.go diff --git a/kernel32.go b/kernel32.go index c38d8bd..c72d59d 100644 --- a/kernel32.go +++ b/kernel32.go @@ -83,3 +83,36 @@ func GetProcessId(Process HANDLE) uint32 { r, _, _ := syscall.Syscall(uintptr(GPI), 1, uintptr(Process), 0, 0) return uint32(r) } + +func GetTickCount() (uint32, error) { + kernel32, err := syscall.LoadLibrary("kernel32.dll") + if err != nil { + return 0, err + } + defer syscall.FreeLibrary(kernel32) + GTC, err := syscall.GetProcAddress(syscall.Handle(kernel32), "GetTickCount") + if err != nil { + return 0, err + } + r, _, _ := syscall.Syscall(uintptr(GTC), 0, 0, 0, 0) + return uint32(r), nil +} + +func GlobalMemoryStatusEx(data *MEMORYSTATUSEX) (bool, error) { + (*data).DwLength = DWORD(unsafe.Sizeof(*data)) + kernel32, err := syscall.LoadLibrary("kernel32.dll") + if err != nil { + return false, err + } + defer syscall.FreeLibrary(kernel32) + GMS, err := syscall.GetProcAddress(syscall.Handle(kernel32), "GlobalMemoryStatusEx") + if err != nil { + return false, err + } + r, _, err := syscall.Syscall(uintptr(GMS), 1, uintptr(unsafe.Pointer(data)), 0, 0) + if r == 0 { + return false, err + } else { + return true, nil + } +} diff --git a/kernel32typedef.go b/kernel32typedef.go index f9e1329..b882896 100644 --- a/kernel32typedef.go +++ b/kernel32typedef.go @@ -15,3 +15,15 @@ type PROCESSENTRY32 struct { DwFlags Ulong SzExeFile [260]byte } + +type MEMORYSTATUSEX struct { + DwLength DWORD + DwMemoryLoad DWORD + UllTotalPhys DWORDLONG + UllAvailPhys DWORDLONG + UllTotalPageFile DWORDLONG + UllAvailPageFile DWORDLONG + UllTotalVirtual DWORDLONG + UllAvailVirtual DWORDLONG + UllAvailExtendedVirtual DWORDLONG +} diff --git a/user32.go b/user32.go new file mode 100644 index 0000000..ecb1b83 --- /dev/null +++ b/user32.go @@ -0,0 +1,49 @@ +package win32api + +import ( + "errors" + "syscall" +) + +func Keybd_event(keyname string, keydown bool) error { + var key int + var down uintptr + if !keydown { + down = KEYEVENTF_KEYUP + } + switch keyname { + case "shift": + key = VK_SHIFT + case "lshift": + key = VK_LSHIFT + case "rshift": + key = VK_RSHIFT + case "a": + key = VK_A + } + user32, err := syscall.LoadLibrary("user32.dll") + if err != nil { + return errors.New("Can't Load User32 API") + } + defer syscall.FreeLibrary(user32) + keyevent, err := syscall.GetProcAddress(syscall.Handle(user32), "keybd_event") + if err != nil { + return errors.New("Can't Load Keybd_event API") + } + syscall.Syscall6(keyevent, 4, uintptr(key), uintptr(key), down, 0, 0, 0) + return nil +} + +func Keybd_event_origin(key, keyenv, down, extra uintptr) error { + user32, err := syscall.LoadLibrary("user32.dll") + if err != nil { + return errors.New("Can't Load User32 API") + } + defer syscall.FreeLibrary(user32) + keyevent, err := syscall.GetProcAddress(syscall.Handle(user32), "keybd_event") + if err != nil { + return errors.New("Can't Load Keybd_event API") + } + syscall.Syscall6(keyevent, 4, key, keyenv, down, extra, 0, 0) + return nil +} diff --git a/user32_typedef.go b/user32_typedef.go new file mode 100644 index 0000000..a8e95e7 --- /dev/null +++ b/user32_typedef.go @@ -0,0 +1,180 @@ +package win32api + +const ( + VK_SHIFT = 0x10 + VK_CTRL = 0x11 + VK_ALT = 0x12 + VK_LSHIFT = 0xA0 + VK_RSHIFT = 0xA1 + VK_LCONTROL = 0xA2 + VK_RCONTROL = 0xA3 + KEYEVENTF_KEYUP = 0x0002 +) +const ( + VK_LBUTTON = 0x01 + VK_RBUTTON = 0x02 + VK_CANCEL = 0x03 + VK_MBUTTON = 0x04 + VK_XBUTTON1 = 0x05 + VK_XBUTTON2 = 0x06 + VK_BACK = 0x08 + VK_TAB = 0x09 + VK_CLEAR = 0x0C + VK_ENTER = 0x0D + VK_PAUSE = 0x13 + VK_CAPITAL = 0x14 + VK_KANA = 0x15 + VK_HANGUEL = 0x15 + VK_HANGUL = 0x15 + VK_JUNJA = 0x17 + VK_FINAL = 0x18 + VK_HANJA = 0x19 + VK_KANJI = 0x19 + VK_ESC = 0x1B + VK_CONVERT = 0x1C + VK_NONCONVERT = 0x1D + VK_ACCEPT = 0x1E + VK_MODECHANGE = 0x1F + VK_SPACE = 0x20 + VK_PRIOR = 0x21 + VK_NEXT = 0x22 + VK_END = 0x23 + VK_HOME = 0x24 + VK_LEFT = 0x25 + VK_UP = 0x26 + VK_RIGHT = 0x27 + VK_DOWN = 0x28 + VK_SELECT = 0x29 + VK_PRINT = 0x2A + VK_EXECUTE = 0x2B + VK_SNAPSHOT = 0x2C + VK_INSERT = 0x2D + VK_DELETE = 0x2E + VK_HELP = 0x2F + VK_0 = 0x30 + VK_1 = 0x31 + VK_2 = 0x32 + VK_3 = 0x33 + VK_4 = 0x34 + VK_5 = 0x35 + VK_6 = 0x36 + VK_7 = 0x37 + VK_8 = 0x38 + VK_9 = 0x39 + VK_A = 0x41 + VK_B = 0x42 + VK_C = 0x43 + VK_D = 0x44 + VK_E = 0x45 + VK_F = 0x46 + VK_G = 0x47 + VK_H = 0x48 + VK_I = 0x49 + VK_J = 0x4A + VK_K = 0x4B + VK_L = 0x4C + VK_M = 0x4D + VK_N = 0x4E + VK_O = 0x4F + VK_P = 0x50 + VK_Q = 0x51 + VK_R = 0x52 + VK_S = 0x53 + VK_T = 0x54 + VK_U = 0x55 + VK_V = 0x56 + VK_W = 0x57 + VK_X = 0x58 + VK_Y = 0x59 + VK_Z = 0x5A + VK_LWIN = 0x5B + VK_RWIN = 0x5C + VK_APPS = 0x5D + VK_SLEEP = 0x5F + VK_NUMPAD0 = 0x60 + VK_NUMPAD1 = 0x61 + VK_NUMPAD2 = 0x62 + VK_NUMPAD3 = 0x63 + VK_NUMPAD4 = 0x64 + VK_NUMPAD5 = 0x65 + VK_NUMPAD6 = 0x66 + VK_NUMPAD7 = 0x67 + VK_NUMPAD8 = 0x68 + VK_NUMPAD9 = 0x69 + VK_MULTIPLY = 0x6A + VK_ADD = 0x6B + VK_SEPARATOR = 0x6C + VK_SUBTRACT = 0x6D + VK_DECIMAL = 0x6E + VK_DIVIDE = 0x6F + VK_F1 = 0x70 + VK_F2 = 0x71 + VK_F3 = 0x72 + VK_F4 = 0x73 + VK_F5 = 0x74 + VK_F6 = 0x75 + VK_F7 = 0x76 + VK_F8 = 0x77 + VK_F9 = 0x78 + VK_F10 = 0x79 + VK_F11 = 0x7A + VK_F12 = 0x7B + VK_F13 = 0x7C + VK_F14 = 0x7D + VK_F15 = 0x7E + VK_F16 = 0x7F + VK_F17 = 0x80 + VK_F18 = 0x81 + VK_F19 = 0x82 + VK_F20 = 0x83 + VK_F21 = 0x84 + VK_F22 = 0x85 + VK_F23 = 0x86 + VK_F24 = 0x87 + VK_NUMLOCK = 0x90 + VK_SCROLL = 0x91 + VK_LMENU = 0xA4 + VK_RMENU = 0xA5 + VK_BROWSER_BACK = 0xA6 + VK_BROWSER_FORWARD = 0xA7 + VK_BROWSER_REFRESH = 0xA8 + VK_BROWSER_STOP = 0xA9 + VK_BROWSER_SEARCH = 0xAA + VK_BROWSER_FAVORITES = 0xAB + VK_BROWSER_HOME = 0xAC + VK_VOLUME_MUTE = 0xAD + VK_VOLUME_DOWN = 0xAE + VK_VOLUME_UP = 0xAF + VK_MEDIA_NEXT_TRACK = 0xB0 + VK_MEDIA_PREV_TRACK = 0xB1 + VK_MEDIA_STOP = 0xB2 + VK_MEDIA_PLAY_PAUSE = 0xB3 + VK_LAUNCH_MAIL = 0xB4 + VK_LAUNCH_MEDIA_SELECT = 0xB5 + VK_LAUNCH_APP1 = 0xB6 + VK_LAUNCH_APP2 = 0xB7 + VK_OEM_1 = 0xBA + VK_OEM_PLUS = 0xBB + VK_OEM_COMMA = 0xBC + VK_OEM_MINUS = 0xBD + VK_OEM_PERIOD = 0xBE + VK_OEM_2 = 0xBF + VK_OEM_3 = 0xC0 + VK_OEM_4 = 0xDB + VK_OEM_5 = 0xDC + VK_OEM_6 = 0xDD + VK_OEM_7 = 0xDE + VK_OEM_8 = 0xDF + VK_OEM_102 = 0xE2 + VK_PROCESSKEY = 0xE5 + VK_PACKET = 0xE7 + VK_ATTN = 0xF6 + VK_CRSEL = 0xF7 + VK_EXSEL = 0xF8 + VK_EREOF = 0xF9 + VK_PLAY = 0xFA + VK_ZOOM = 0xFB + VK_NONAME = 0xFC + VK_PA1 = 0xFD + VK_OEM_CLEAR = 0xFE +) diff --git a/win32api.go b/win32api.go index 4240307..d1b66fd 100644 --- a/win32api.go +++ b/win32api.go @@ -10,6 +10,7 @@ type ( COLORREF uint32 DWM_FRAME_COUNT uint64 DWORD uint32 + DWORDLONG uint64 HACCEL HANDLE HANDLE uintptr HBITMAP HANDLE