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.

Subscribe for new updates