Wie bekomme ich eine Mausklickposition?

7

Ich weiß, dass ich durch Ausführen die Position des Mauszeigers ermitteln kann xdotool getmouselocation. Was ich brauche, ist ein Programm, das ausgeführt wird und mir die Position mitteilt, an der der Mauszeiger klickt.

milarepa
quelle
Mir ist kein Dienstprogramm bekannt, aber Sie sollten sich diese beiden Antworten ansehen , um Ihre eigenen zu kompilieren.
Matt
Nur für Klicks im Fenster dieses Programms? Oder für alle Klicks auf dem System?
Gilles 'SO - hör auf böse zu sein'

Antworten:

3

Sie können GNU Xnee verwenden , um Ihre Mausereignisse zu verfolgen und dann nur Ereignisse beim Drücken der Maustaste zu erfassen . Da das Mausklickereignis jedoch keine Mausposition enthält, sollten Sie es vom vorherigen Ereignis speichern oder einen externen Befehl (z. B. xdotool) ausführen , um die aktuelle Mausposition abzurufen.

Beispiel:

$ cnee --record --mouse | awk  '/7,4,0,0,1/ { system("xdotool getmouselocation") }'

Es werden alle linken Klicks erfasst. Ändern Sie die letzte Nummer im Befehl awk, um andere Tasten zu erhalten (1 - linke Maus, 2 - mittlere Maus, 3 - rechte Maus), oder entfernen Sie sie, um alle zu erfassen.

Auch der Ereignisname kann auf Ihrem System möglicherweise anders aussehen. Führen $ cnee --record --mouseSie es einfach aus , um es herauszufinden, und ersetzen Sie diesen Teil im Befehl awk.

diffycat
quelle
2
// Set Netscape up to run the "captureMousePosition" function whenever
// the mouse is moved. For Internet Explorer and Netscape 6, you can capture
// the movement a little easier.
if (document.layers) { // Netscape
document.captureEvents(Event.MOUSEMOVE);
document.onmousemove = captureMousePosition;
} else if (document.all) { // Internet Explorer
document.onmousemove = captureMousePosition;
} else if (document.getElementById) { // Netcsape 6
document.onmousemove = captureMousePosition;
}
// Global variables
xMousePos = 0; // Horizontal position of the mouse on the screen
yMousePos = 0; // Vertical position of the mouse on the screen
xMousePosMax = 0; // Width of the page
yMousePosMax = 0; // Height of the page

function captureMousePosition(e) {
if (document.layers) {
    // When the page scrolls in Netscape, the event's mouse position
    // reflects the absolute position on the screen. innerHight/Width
    // is the position from the top/left of the screen that the user is
    // looking at. pageX/YOffset is the amount that the user has 
    // scrolled into the page. So the values will be in relation to
    // each other as the total offsets into the page, no matter if
    // the user has scrolled or not.
    xMousePos = e.pageX;
    yMousePos = e.pageY;
    xMousePosMax = window.innerWidth+window.pageXOffset;
    yMousePosMax = window.innerHeight+window.pageYOffset;
 } else if (document.all) {
    // When the page scrolls in IE, the event's mouse position 
    // reflects the position from the top/left of the screen the 
    // user is looking at. scrollLeft/Top is the amount the user
    // has scrolled into the page. clientWidth/Height is the height/
    // width of the current page the user is looking at. So, to be
    // consistent with Netscape (above), add the scroll offsets to
    // both so we end up with an absolute value on the page, no 
    // matter if the user has scrolled or not.
    xMousePos = window.event.x+document.body.scrollLeft;
    yMousePos = window.event.y+document.body.scrollTop;
    xMousePosMax = document.body.clientWidth+document.body.scrollLeft;
    yMousePosMax = document.body.clientHeight+document.body.scrollTop;
  } else if (document.getElementById) {
    // Netscape 6 behaves the same as Netscape 4 in this regard 
    xMousePos = e.pageX;
    yMousePos = e.pageY;
    xMousePosMax = window.innerWidth+window.pageXOffset;
    yMousePosMax = window.innerHeight+window.pageYOffset;
  }
 }

Um zu überprüfen, ob es einwandfrei funktioniert oder nicht, verwenden Sie den folgenden Code:

window.status = "xMousePos=" + xMousePos + ", yMousePos=" + yMousePos + ", xMousePosMax=" + xMousePosMax + ", yMousePosMax=" + yMousePosMax
Aaditya
quelle