--- a/WinWorkstation.st Wed Apr 12 19:13:22 2017 +0200
+++ b/WinWorkstation.st Wed Apr 12 19:30:34 2017 +0200
@@ -13018,6 +13018,7 @@
int _isMouseEvent = 0;
int _isKeyEvent = 0;
int _keyCodeOrButtonNr = -1;
+ int _shifted = 0;
int _x = 0, _y = 0;
if (__isExternalAddress(targetId)) {
@@ -13027,7 +13028,18 @@
_keyCodeOrButtonNr = __intVal(keySymCodeOrButtonNr);
} else {
if (__isCharacter(keySymCodeOrButtonNr)) {
+
_keyCodeOrButtonNr = __intVal(__characterVal(keySymCodeOrButtonNr));
+console_printf("code: %d (#%02x)\n", _keyCodeOrButtonNr, _keyCodeOrButtonNr);
+ if ((_keyCodeOrButtonNr >= 'a') && (_keyCodeOrButtonNr <= 'z')) {
+ _keyCodeOrButtonNr -= 0x20;
+console_printf("code: %d (#%02x)\n", _keyCodeOrButtonNr, _keyCodeOrButtonNr);
+ } else {
+ if ((_keyCodeOrButtonNr >= 'A') && (_keyCodeOrButtonNr <= 'Z')) {
+console_printf("code: shifted %d (#%02x)\n", _keyCodeOrButtonNr, _keyCodeOrButtonNr);
+ _shifted = 1;
+ }
+ }
} else if (keySymCodeOrButtonNr == @symbol(Return)) {
_keyCodeOrButtonNr = VK_RETURN;
} else if (keySymCodeOrButtonNr == @symbol(Enter)) {
@@ -13170,8 +13182,15 @@
console_printf("mouse %08x %d/%d\n", dwFlags | MOUSEEVENTF_ABSOLUTE, _x, _y);
mouse_event(dwFlags | MOUSEEVENTF_ABSOLUTE, _x, _y, 0, NULL);
} else {
-console_printf("keybd %08x %d (%02x)\n", dwFlags, _keyCodeOrButtonNr, _keyCodeOrButtonNr);
- keybd_event( 0, _keyCodeOrButtonNr, dwFlags, 0);
+ if (_shifted) {
+console_printf("shifted keybd #%08x %d (#%02x)\n", dwFlags, _keyCodeOrButtonNr, _keyCodeOrButtonNr);
+ keybd_event( VK_SHIFT, 0 /* _keyCodeOrButtonNr */, 0, 0);
+ keybd_event( _keyCodeOrButtonNr, 0 /* _keyCodeOrButtonNr */, dwFlags, 0);
+ keybd_event( VK_SHIFT, 0 /* _keyCodeOrButtonNr */, KEYEVENTF_KEYUP, 0);
+ } else {
+console_printf("keybd #%08x %d (#%02x)\n", dwFlags, _keyCodeOrButtonNr, _keyCodeOrButtonNr);
+ keybd_event( _keyCodeOrButtonNr, 0 /* _keyCodeOrButtonNr */, dwFlags, 0);
+ }
}
} else {
rslt = PostMessage(hWnd, msg, wParam, lParam);