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)); } } </pre> 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.