Windows native C programming - Simulate a keyboard key-press event
Something like this example code can be used to generate key-press events on Windows.
#include#include #include . . . enum { KModMaskCtrl, KModMaskAlt, KModMaskShift }; . . . void SimulateKey(int KeyCode, int mod) { INPUT Input={0}; if(mod & KModMaskCtrl) { ZeroMemory(&Input,sizeof(INPUT)); Input.type = INPUT_KEYBOARD; Input.ki.wVk = VK_CONTROL; Input.ki.dwFlags = KEYEVENTF_UNICODE; SendInput(1,&Input,sizeof(INPUT)); Sleep(20); } if(mod & KModMaskAlt) { ZeroMemory(&Input,sizeof(INPUT)); Input.type = INPUT_KEYBOARD; Input.ki.wVk = VK_MENU; Input.ki.dwFlags = KEYEVENTF_UNICODE; SendInput(1,&Input,sizeof(INPUT)); Sleep(20); } if(mod & KModMaskShift) { ZeroMemory(&Input,sizeof(INPUT)); Input.type = INPUT_KEYBOARD; Input.ki.wVk = VK_SHIFT; Input.ki.dwFlags = KEYEVENTF_UNICODE; SendInput(1,&Input,sizeof(INPUT)); Sleep(20); } ZeroMemory(&Input,sizeof(INPUT)); Input.type = INPUT_KEYBOARD; Input.ki.wVk = KeyCode; Input.ki.dwFlags = KEYEVENTF_UNICODE; SendInput(1,&Input,sizeof(INPUT)); Sleep(20); ZeroMemory(&Input,sizeof(INPUT)); Input.type = INPUT_KEYBOARD; Input.ki.wVk = KeyCode; Input.ki.dwFlags = KEYEVENTF_KEYUP; SendInput(1,&Input,sizeof(INPUT)); if(mod & KModMaskShift) { Sleep(20); ZeroMemory(&Input,sizeof(INPUT)); Input.type = INPUT_KEYBOARD; Input.ki.wVk = VK_SHIFT; Input.ki.dwFlags = KEYEVENTF_KEYUP; SendInput(1,&Input,sizeof(INPUT)); } if(mod & KModMaskAlt) { Sleep(20); ZeroMemory(&Input,sizeof(INPUT)); Input.type = INPUT_KEYBOARD; Input.ki.wVk = VK_MENU; Input.ki.dwFlags = KEYEVENTF_KEYUP; SendInput(1,&Input,sizeof(INPUT)); } if(mod & KModMaskCtrl) { Sleep(20); ZeroMemory(&Input,sizeof(INPUT)); Input.type = INPUT_KEYBOARD; Input.ki.wVk = VK_CONTROL; Input.ki.dwFlags = KEYEVENTF_KEYUP; SendInput(1,&Input,sizeof(INPUT)); } }
See winuser.h for a list of virtual_key codes you can use, here are some codes
define VK_SPACE 0x20
define VK_PRIOR 0x21
define VK_NEXT 0x22
define VK_END 0x23
define VK_HOME 0x24
define VK_LEFT 0x25
define VK_UP 0x26
define VK_RIGHT 0x27
define VK_DOWN 0x28
define VK_SELECT 0x29
define VK_PRINT 0x2A
define VK_EXECUTE 0x2B
define VK_SNAPSHOT 0x2C
define VK_INSERT 0x2D
define VK_DELETE 0x2E
define VK_HELP 0x2F
. . .
blog comments powered by Disqus
This ClearEvo.com blog is powered by Debian GNU/Linux, running lighttpd, generated using jekyll on Ubuntu.