OS X 10.11の画面の特定の矩形領域にマウスの動きを制限したい。私はこれを行うにはMouseTools(下)からいくつかのコードを変更しましたが、画面の端にぶつかったときにはびっくりします。このジッタをどのように取り除くことができますか?ジッタのないOS Xの領域へのマウスの移動を制限する
// gcc -Wall constrain.cpp -framework ApplicationServices -o constrain
#include <ApplicationServices/ApplicationServices.h>
int main (int argc, const char * argv[]) {
if(argc != 5) {
printf("Usage: constrain left top right bottom\n");
return 0;
}
int leftBound = strtol(argv[1], NULL, 10);
int topBound = strtol(argv[2], NULL, 10);
int rightBound = strtol(argv[3], NULL, 10);
int bottomBound = strtol(argv[4], NULL, 10);
CGEventTapLocation tapLocation = kCGHIDEventTap;
CGEventSourceRef sourceRef = CGEventSourceCreate(kCGEventSourceStatePrivate);
while(true) {
CGEventRef mouseEvent = CGEventCreate(NULL);
CGPoint mouseLoc = CGEventGetLocation(mouseEvent);
int x = mouseLoc.x, y = mouseLoc.y;
if(x < leftBound || x > rightBound || y < topBound || y > bottomBound) {
if(x < leftBound) x = leftBound;
if(x > rightBound) x = rightBound;
if(y < topBound) y = topBound;
if(y > bottomBound) y = bottomBound;
CGEventRef moveMouse = CGEventCreateMouseEvent(sourceRef, kCGEventMouseMoved, CGPointMake(x, y), 0);
CGEventPost(tapLocation, moveMouse);
CFRelease(moveMouse);
}
CFRelease(mouseEvent);
usleep(8*1000); // 8ms, ~120fps
}
CFRelease(sourceRef);
return 0;
}
は、ここに私が試した他のいくつかのものです:Receiving, Filtering, and Modifying Mouse EventsはCGEventTapCreate
を使用して、マウスの動きのためのコールバックを作成する方法を示しています。コードでは、「マウスイベントの側面を変更することができます。たとえば、CGEventSetLocation(event, newLocation)
を使用できます。残念ながら、これは実際にはマウスの位置を変更しません(完全な例here)。マウスの位置を変更できる唯一の方法は、CGEventPost
またはCGWarpMouseCursorPosition
です。またkCGSessionEventTap
の代わりに kCGHIDEventTap
を試してみましたが、私はスーパーユーザーのアクセス許可とアクセシビリティがアプリで有効になっていることを確認しました。それは正常に動作するmodifying key pressesの別の例があるので、うまくいくように思えます。 CGEventSetLocation
の代わりにCGEventSetIntegerValueField
(キーボードの例のような)を使ってxとyのデルタを0に設定しようとしましたが、これは何も変わりませんでした。
最後に、私もCGEventCallback
の中にCGEventPost
とCGWarpMouseCursorPosition
を使ってみましたが、 "見えない境界"はまだ上記のコードよりもジッタがあります。
問題の説明は冗長です。 AppleScriptプログラムで問題が発生しない限り、AppleScriptプログラムで何をしたかは誰も気にしません。 –
@ElTomato私は、AppleScriptでの最初の試行を説明する2つの文章と私が持っていた問題を削除することで、問題をあまり詳しく説明しませんでした。このトピックについて何か知っているとすれば、私は更新された質問にあなたのご意見をお寄せください。ありがとう! –
マウスの動きは誰に拘束されますか?あなたのコンピュータやあなたのアプリケーションのユーザーを使っている人は誰ですか? –