Как узнать позицию щелчка мыши?

Как узнать позицию щелчка мыши?

Я знаю, что могу получить позицию указателя мыши, выполнив xdotool getmouselocation. Мне нужна программа, которая будет работать и сообщать мне позицию, в которой щелкает указатель мыши.

решение1

Вы можете использоватьGNU Xneeдля отслеживания событий мыши и затем grep только событий нажатия клавиш мыши. Но поскольку событие щелчка мыши не содержит позицию мыши, вам следует сохранить ее из предыдущего события или выполнить внешнюю команду (например, xdotool), чтобы получить текущую позицию мыши.

Пример:

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

Он захватит все левые щелчки. Измените последнюю цифру в команде awk, чтобы получить другие клавиши (1 - левая мышь, 2 - средняя мышь, 3 - правая мышь) или удалите ее, чтобы захватить их все.

Также имя события, вероятно, может выглядеть по-другому в вашей системе. Просто запустите $ cnee --record --mouse, чтобы узнать его, и замените эту часть в команде awk.

решение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;
  }
 }

Чтобы проверить, работает ли он нормально или нет, используйте следующий код:

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

Связанный контент