#FEATURE by expecco
authorClaus Gittinger <cg@exept.de>
Wed, 12 Apr 2017 19:30:34 +0200
changeset 8014 9b3128e00e64
parent 8013 c88e98d6690e
child 8015 5e741507eeee
#FEATURE by expecco class: WinWorkstation changed: #sendKeyOrButtonEvent:x:y:keyOrButton:state:toViewId:
WinWorkstation.st
--- 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);