I received a query from reader Partha D about generating unicode keystrokes using the SendInput function in Windows. As I understand it, Partha wants to generate one or more unicode keystrokes when a particular keyboard shortcut is pressed. The following example program illustrates the use of the SendInput function to generate keyboard events for unicode characters. It just generates a single keystroke (a Bengali character) after a 3-second delay.
//
// unicodeinput.c - sends a unicode character to whichever
// window is in focus after a delay of 3 seconds (to allow
// time to switch to e.g. Notepad from the command window).
//
// Written by Ted Burke - last updated 2-10-2014
//
// To compile with MinGW:
//
// gcc unicodeinput.c -o unicodeinput.exe
//
// To run the program:
//
// unicodeinput.exe
//
// Because the SendInput function is only supported in
// Windows 2000 and later, WINVER needs to be set as
// follows so that SendInput gets defined when windows.h
// is included below.
#define WINVER 0x0500
#include <windows.h>
int main()
{
// Create a keyboard event structure
INPUT ip;
ip.type = INPUT_KEYBOARD;
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;
// 3 second delay to switch to another window
Sleep(3000);
// Press a unicode "key"
ip.ki.dwFlags = KEYEVENTF_UNICODE;
ip.ki.wVk = 0;
ip.ki.wScan = 0x09A4; // This is a Bengali unicode character
SendInput(1, &ip, sizeof(INPUT));
// Release key
ip.ki.dwFlags = KEYEVENTF_UNICODE | KEYEVENTF_KEYUP;
SendInput(1, &ip, sizeof(INPUT));
// The End
return 0;
}
To test the program, I opened a command window and a Notepad window. I compiled and ran the program in the command window, as shown below:
Then I immediately switched the focus to a Notepad window. After three seconds, the following unicode character was typed (I’ve increased the font size to the maximum for clarity):

