#FEATURE by cg
authorClaus Gittinger <cg@exept.de>
Thu, 02 Mar 2017 21:24:17 +0100
changeset 21621 0712ebc6d6cf
parent 21620 f13226508305
child 21622 0feeeed4f432
#FEATURE by cg class: OSXOperatingSystem added: #generateKeyboardEvent:down: #generateMouseMoveEventX:y:
OSXOperatingSystem.st
--- a/OSXOperatingSystem.st	Wed Mar 01 18:52:30 2017 +0100
+++ b/OSXOperatingSystem.st	Thu Mar 02 21:24:17 2017 +0100
@@ -359,6 +359,60 @@
     "Created: / 28-02-2017 / 00:15:18 / cg"
 !
 
+generateKeyboardEvent:keyCode down:down
+    "synthesize and send a keyboard event to the screen"
+%{
+#ifndef NO_COCOA
+    if (__isSmallInteger(keyCode)) {
+        int evType;
+        
+        CGEventRef theEvent = CGEventCreateKeyboardEvent(NULL, __intVal(keyCode), (down==true)?1:0);
+        CGEventSetType(theEvent, (down==true) ? kCGEventKeyDown:kCGEventKeyUp);
+        CGEventPost(kCGHIDEventTap, theEvent);
+        CFRelease(theEvent);
+        RETURN(self);
+    }
+#endif // NO_COCOA
+%}.
+    self primitiveFailed
+
+    "
+     OperatingSystem generateKeyboardEvent:6 down:true.
+     OperatingSystem generateKeyboardEvent:6 down:false.
+    "
+
+    "Created: / 02-03-2017 / 16:35:04 / cg"
+!
+
+generateMouseMoveEventX:screenX y:screenY
+    "synthesize and send a mosue move event to the screen"
+%{
+#ifndef NO_COCOA
+    if (__bothSmallInteger(screenX, screenY)) {
+        CGPoint pt;
+        pt.x = __intVal(screenX);
+        pt.y = __intVal(screenY);
+
+        CGEventType evType;
+        CGEventRef theEvent = CGEventCreateMouseEvent(NULL, kCGEventMouseMoved, pt, 0);
+        CGEventSetType(theEvent, kCGEventMouseMoved);
+        CGEventPost(kCGHIDEventTap, theEvent);
+        CFRelease(theEvent);
+        RETURN(self);
+    }
+#endif // NO_COCOA
+%}.
+    self primitiveFailed
+
+    "
+     OperatingSystem generateMouseMoveEventX:150 y:5.
+     Delay waitFor:(1 seconds).
+     OperatingSystem generateMouseMoveEventX:1050 y:150.
+    "
+
+    "Created: / 02-03-2017 / 20:01:51 / cg"
+!
+
 getNSApp
 %{
 #ifndef NO_COCOA