This example translates virtual scan code and effective shift state for [ to Unicode.
#include <stdio.h> #include <unikbd.h> int main(void) { KHAND kbdhandle; KBDNAME *kbd_name; ULONG mode = 0; USHIFTSTATE Uss = {0};/* indicates no shift keys, toggle keys, dead keys, or layer keys are pressed. */ VSCAN v_scan; BYTE makebreak; UniChar uc; VDKEY vk; BYTE bscan; APIRET rc; /***************************************************/ /* Create a keyboard handle for US keyboard layout */ /***************************************************/ kbd_name = (UniChar*)L"us"; rc = UniCreateKeyboard( &kbdhandle, kbd_name, mode ); if ( rc != ULS_SUCCESS ) { printf("UniCreateKeyboard error: return code = %u\n", rc ); return 1; } v_scan = 0x5B; /*PM scan code for [ */ makebreak = KEYEV_MAKE; /*indicate key is pressed down*/ rc = UniUpdateShiftState( kbdhandle, &Uss, v_scan, makebreak ); if ( rc != ULS_SUCCESS ) { printf("UniUpdateShiftState error: return code = %u\n", rc ); return 1; } rc = UniTranslateKey( kbdhandle, Uss.Effective, v_scan, &uc, &vk, &bscan ); if ( rc != ULS_SUCCESS ) { printf("UniTranslateKey error: return code = %u\n", rc ); return 1; } return ULS_SUCCESS; }