WiseMo Guest Component API
SendUnicode parameters

SendUnicode parameters

Method IWGuestCore::SendUnicode() follows closely to how keyboard input is transmitted to Host and has parameters less straightforward than other methods.
Additionally flags paramter should be translated to 32bit signed format

original valuesigned 32bit format
0x7FFFFFFF2147483647
......
0x000000022
0x000000011
0x000000000
0xFFFFFFFF-1
0xFFFFFFFE-2
......
0x80000000-2147483648

This formula can be used for JavaScript translation:

function to_signed32bit(x)
{
return x - (x <= 2147483647 ? 0 : 4294967296);
}

SendUnicode parameters for skin buttons


special - always true
keycode - virtual code
flags (converted to signed 32bit)

key virtual code scan code key virtual code scan code
VK_LBUTTON1 0xFF VK_TVOLUMEDOWN0x76 0x41
VK_RBUTTON2 0xFF VK_TSTAR0x77 0x42
VK_CANCEL3 0x46 VK_TPOUND0x78 0x43
VK_MBUTTON4 0xFF VK_TRECORD0x79 0x44
VK_XBUTTON15 0xFF VK_SYMBOL0x7A 0x57
VK_XBUTTON26 0xFF VK_F120x7B 0x58
VK_BACK8 0x0E VK_F130x7C 0x64
VK_TAB9 0x0F VK_F140x7D 0x65
VK_CLEAR0x0C 0x4C VK_F150x7E 0x66
VK_RETURN0x0D 0x1C VK_F160x7F 0x67
VK_SHIFT0x10 0x2A VK_TFLIP0x80 0x68
VK_CONTROL0x11 0x1D VK_TPOWER0x81 0x69
VK_MENU0x12 0x38 VK_REDKEY0x82 0x6A
VK_PAUSE0x13 0xFF VK_ROCKER0x83 0x6B
VK_CAPITAL0x14 0x3A VK_DPAD0x84 0x6C
VK_HANGUL0x15 0xFF VK_F220x85 0x6D
VK_JUNJA0x17 0xFF VK_ACTION0x86 0x6E
VK_FINAL0x18 0xFF VK_F240x87 0x76
VK_KANJI0x19 0xFF VK_NUMLOCK0x90 0x45
VK_TBACK0x1B 0x01 VK_SCROLL0x91 0x46
VK_CONVERT0x1C 0xFF VK_OEM_FJ_JISHO0x92 0xFF
VK_NONCONVERT0x1D 0xFF VK_OEM_FJ_MASSHOU0x93 0xFF
VK_ACCEPT0x1E 0xFF VK_OEM_FJ_TOUROKU0x94 0xFF
VK_MODECHANGE0x1F 0xFF VK_OEM_FJ_LOYA0x95 0xFF
VK_SPACE0x20 0x39 VK_OEM_FJ_ROYA0x96 0xFF
VK_PRIOR0x21 0x49 VK_LSHIFT0xA0 0x2A
VK_NEXT0x22 0x51 VK_RSHIFT0xA1 0x36
VK_END0x23 0x4F VK_LCONTROL0xA2 0x1D
VK_HOME0x24 0x47 VK_RCONTROL0xA3 0x1D
VK_LEFT0x25 0x4B VK_LMENU0xA4 0x8B
VK_UP0x26 0x48 VK_RMENU0xA5 0x38
VK_RIGHT0x27 0x4D VK_BROWSER_BACK0xA6 0x6A
VK_DOWN0x28 0x50 VK_BROWSER_FORWARD0xA7 0x69
VK_SELECT0x29 0xFF VK_BROWSER_REFRESH0xA8 0x67
VK_PRINT0x2A 0xFF VK_BROWSER_STOP0xA9 0x68
VK_EXECUTE0x2B 0xFF VK_BROWSER_SEARCH0xAA 0x65
VK_SNAPSHOT0x2C 0x54 VK_BROWSER_FAVORITES0xAB 0x66
VK_INSERT0x2D 0x52 VK_BROWSER_HOME0xAC 0x32
VK_DELETE0x2E 0x53 VK_VOLUME_MUTE0xAD 0x20
VK_HELP0x2F 0x63 VK_VOLUME_DOWN0xAE 0x2E
VK_00x30 0x0B VK_VOLUME_UP0xAF 0x30
VK_10x31 0x02 VK_MEDIA_NEXT_TRACK0xB0 0x19
VK_20x32 0x03 VK_MEDIA_PREV_TRACK0xB1 0x10
VK_30x33 0x04 VK_MEDIA_STOP0xB2 0x24
VK_40x34 0x05 VK_MEDIA_PLAY_PAUSE0xB3 0x22
VK_50x35 0x06 VK_LAUNCH_MAIL0xB4 0x6C
VK_60x36 0x07 VK_LAUNCH_MEDIA_SELECT0xB5 0x6D
VK_70x37 0x08 VK_LAUNCH_APP10xB6 0x6B
VK_80x38 0x09 VK_LAUNCH_APP20xB7 0x21
VK_90x39 0x0A VK_OEM_10xBA 0x27
VK_A0x41 0x1E VK_OEM_PLUS0xBB 0x0D
VK_B0x42 0x30 VK_OEM_COMMA0xBC 0x33
VK_C0x43 0x2E VK_OEM_MINUS0xBD 0x0C
VK_D0x44 0x20 VK_OEM_PERIOD0xBE 0x34
VK_E0x45 0x12 VK_OEM_20xBF 0x35
VK_F0x46 0x21 VK_OEM_30xC0 0x29
VK_G0x47 0x22 VK_APP10xC1 0xFF
VK_H0x48 0x23 VK_APP20xC2 0xFF
VK_I0x49 0x17 VK_APP30xC3 0xFF
VK_J0x4A 0x24 VK_APP40xC4 0xFF
VK_K0x4B 0x25 VK_APP50xC5 0xFF
VK_L0x4C 0x26 VK_APP60xC6 0xFF
VK_M0x4D 0x32 VK_APP70xC7 0xFF
VK_N0x4E 0x31 VK_APP80xC8 0xFF
VK_O0x4F 0x18 VK_APP90xC9 0xFF
VK_P0x50 0x19 VK_APP100xCA 0xFF
VK_Q0x51 0x10 VK_APP110xCB 0xFF
VK_R0x52 0x13 VK_APP120xCC 0xFF
VK_S0x53 0x1F VK_OEM_40xDB 0x1A
VK_T0x54 0x14 VK_OEM_50xDC 0x2B
VK_U0x55 0x16 VK_OEM_60xDD 0x1B
VK_V0x56 0x2F VK_OEM_70xDE 0x28
VK_W0x57 0x11 VK_OEM_80xDF 0xFF
VK_X0x58 0x2D VK_OEM_AX0xE1 0xFF
VK_Y0x59 0x15 VK_OEM_1020xE2 0x56
VK_Z0x5A 0x2C VK_ICO_HELP0xE3 0xFF
VK_THOME0x5B 0x5B VK_ICO_000xE4 0xFF
VK_RWIN0x5C 0x5C VK_PROCESSKEY0xE5 0xFF
VK_APPS0x5D 0x5D VK_ICO_CLEAR0xE6 0xFF
VK_SLEEP0x5F 0x5F VK_PACKET0xE7 0xFF
VK_NUMPAD00x60 0x52 VK_OEM_RESET0xE9 0x71
VK_NUMPAD10x61 0x4F VK_OEM_JUMP0xEA 0x5C
VK_NUMPAD20x62 0x50 VK_OEM_PA10xEB 0x7B
VK_NUMPAD30x63 0x51 VK_OEM_PA20xEC 0xFF
VK_NUMPAD40x64 0x4B VK_OEM_PA30xED 0x6F
VK_NUMPAD50x65 0x4C VK_OEM_WSCTRL0xEE 0x5A
VK_NUMPAD60x66 0x4D VK_OEM_CUSEL0xEF 0xFF
VK_NUMPAD70x67 0x47 VK_OEM_ATTN0xF0 0xFF
VK_NUMPAD80x68 0x48 VK_OEM_FINISH0xF1 0x5B
VK_NUMPAD90x69 0x49 VK_OEM_COPY0xF2 0xFF
VK_MULTIPLY0x6A 0x37 VK_OEM_AUTO0xF3 0x5F
VK_ADD0x6B 0x4E VK_OEM_ENLW0xF4 0xFF
VK_SEPARATOR0x6C 0xFF VK_OEM_BACKTAB0xF5 0x5E
VK_SUBTRACT0x6D 0x4A VK_ATTN0xF6 0xFF
VK_DECIMAL0x6E 0x53 VK_CRSEL0xF7 0xFF
VK_DIVIDE0x6F 0x35 VK_EXSEL0xF8 0xFF
VK_TSOFT10x70 0x3B VK_EREOF0xF9 0x5D
VK_TSOFT20x71 0x3C VK_PLAY0xFA 0xFF
VK_TTALK0x72 0x3D VK_ZOOM0xFB 0x62
VK_TEND0x73 0x3E VK_NONAME0xFC 0xFF
VK_F50x74 0x3F VK_PA10xFD 0xFF
VK_TVOLUMEUP0x75 0x40 VK_OEM_CLEAR0xFE 0xFF

That is, if according to Skin Designer the button has key sequence VK_VOLUME_UP,
it can be programmaticaly sent as

ctrl.SendUnicode(0xAF, to_signed32bit(0x02300000), true);
ctrl.SendUnicode(0xAF, to_signed32bit(0xC2300001), true);

and if the key sequence is (VK_SHIFT)VK_9
then it can be sent as

ctrl.SendUnicode(0x10, to_signed32bit(0x022A0000), true); // press Shift
ctrl.SendUnicode(0xAF, to_signed32bit(0x02300000), true); // press 9
ctrl.SendUnicode(0xAF, to_signed32bit(0xC2300001), true); // release 9
ctrl.SendUnicode(0x10, to_signed32bit(0xC22A0001), true); // release Shift

SendUnicode parameters for keyboard keys


special - true or false


when special is false:
keycode - unicode symbol
flags (converted to signed 32bit)


when special is true:
keycode - virtual key code
flags (converted to signed 32bit)

keyspecial?keycode extended bit + scan codekeyspecial?keycode extended bit + scan code
Esc0x1b 0x001 LCtl yes 0xa2 0x01d
F1 yes 0x70 0x03b LWin yes 0x5b 0x15b
F2 yes 0x71 0x03c LAlt -—-—-—
F3 yes 0x72 0x03d Space 0x20 0x039
F4 yes 0x73 0x03e RAlt -—-—-—
F5 yes 0x74 0x03f RWin yes 0x5c 0x15c
F6 yes 0x75 0x040 Menu yes 0x5d 0x15d
F7 yes 0x76 0x041 RCtl yes 0xa3 0x11d
F8 yes 0x77 0x042 PrScreen -—-—-—
F9 yes 0x78 0x043 ScrLock yes 0x91 0x046
F10 yes 0x79 0x044 Pause-—-—-—
F11 yes 0x7a 0x057 Ins yes 0x2d 0x152
F12 yes 0x7b 0x058 Home yes 0x24 0x147
~ PageUpyes 0x21 0x149
1 Delete yes 0x2e 0x153
2 End yes 0x23 0x14f
3 PageDownyes 0x22 0x151
4 Left yes 0x25 0x14b
5 Up yes 0x26 0x148
6 Right yes 0x27 0x14d
7 Downyes 0x28 0x150
8 NumLock yes 0x90 0x145
9 numlock off
0 Num/ 0x2f 0x135
- Num* 0x2a 0x037
= Num- 0x2d 0x04a
\ Num7 0x37 0x047
BS 0x08 0x00e Num8 0x38 0x048
Tab 0x09 0x00f Num9 0x39 0x049
Q Num+ 0x2b 0x04e
W Num4 0x34 0x04b
E Num5 0x35 0x04c
R Num6 0x36 0x04d
T Num1 0x31 0x04f
Y Num2 0x32 0x050
U Num3 0x33 0x051
I NumEnter0x0d 0x11c
O Num0 0x30 0x052
P NumDel 0x2e 0x053
[ numlock on
] Num/ 0x2f 0x135
Enter 0x0d 0x01c Num* 0x2a 0x037
CapsLock yes 0x14 0x03a Num- 0x2d 0x04a
A Num7 yes 0x24 0x047
S Num8 yes 0x26 0x048
D Num9 yes 0x21 0x049
F Num+ 0x2b 0x04e
G Num4 yes 0x25 0x04b
H Num5 -—-—-—
J Num6 yes 0x27 0x04d
K Num1 yes 0x23 0x04f
L Num2 yes 0x28 0x050
; Num3 yes 0x22 0x051
'NumEnter0x0d 0x11c
LShift yes 0x10 0x02a Num0 yes 0x2d 0x052
Z NumDel yes 0x2e 0x053
X
C
V
B
N
M
<
>
?
RShiftyes 0x10 0x136
RShiftyes 0x10 0x136
RShiftyes 0x10 0x136

For example, to send keyboard strokes 123 <Enter>:

ctrl.SendUnicode(charCodeAt('1'), to_signed32bit(0x00000001), false); // press 1
ctrl.SendUnicode(charCodeAt('1'), to_signed32bit(0xC0000001), false); // release 1
ctrl.SendUnicode(charCodeAt('2'), to_signed32bit(0x00000001), false); // press 2
ctrl.SendUnicode(charCodeAt('2'), to_signed32bit(0xC0000001), false); // release 2
ctrl.SendUnicode(charCodeAt('3'), to_signed32bit(0x00000001), false); // press 3
ctrl.SendUnicode(charCodeAt('3'), to_signed32bit(0xC0000001), false); // release 3
ctrl.SendUnicode(0x0d, to_signed32bit(0x001C0001), false); // press Enter
ctrl.SendUnicode(0x0d, to_signed32bit(0xC01C0001), false); // release Enter