2012-01-07 2 views
7

모두Xlib/C로 마우스 클릭을 어떻게 시뮬레이트합니까?

나는이 질문이 대답 한 것처럼 믿을 수 없다. 나는 지난 두 시간 동안 인터넷 검색을하고 있었고 작동하는 것을 찾을 수 없었다. 내가하고 싶은 것은 왼쪽 마우스 버튼 클릭을 '입력'하는 C/Xorg 코드를 찾는 것입니다. 한 줄의 코드를 기대할 수 있지만 C 언어로 작성된 유일한 것들은 길이가 약 20 줄이고 어쨌든 작동하지 않습니다. (Windows에서 할 수 있지만 Linux에 있습니다. .

질문의 이유는 키보드를 사용하여 여러 화면 사이에서 마우스 포인터를 움직일 수있는 유틸리티를 작성했기 때문입니다. 유일한 문제는 이전에 abc 위치였던 곳으로 이동하면 다른 창 xyz가 동일한 위치 위에로드되었지만 마우스 포인터가 xyz로 잘 움직 였지만 xyz에는 포커스가 없습니다 - 마우스를 클릭하기 전까지는 마우스를 클릭하기 만하면됩니다. 코드.

작동하지 않는 코드는 XSendEvent()를 기반으로했습니다.

+0

** 이유 **를 포함하여 +1하고 싶습니다. –

+0

마우스를 사용하고 싶지 않은 경우 이러한 종류의 작업을 지원하는 창 관리자를 사용해보십시오. 나는 xmonad를 추천 할 수 있지만 다른 것들이있다. –

답변

2

가짜 클릭 이벤트를 만들기보다는 창을 직접 올리거나 집중시키는 것이 어떨까요? 그것은 훨씬 더 신뢰할 수 있어야하며 모든 창 관리자, 심지어 클릭하지 않는 것에서 초점을 맞추는 창 관리자와도 작업해야합니다.

+0

R : 스크린 사이를 이동할 수있는 운동의 요점. 마우스를 터치해야하기 때문에 KB를 통해 포인터를 움직일 수는 있지만 어쨌든 마우스 왼쪽 버튼을 클릭해야만 모든 것이 무의미 해집니다. 물론 같은 화면의 창 사이를 이동할 때 아무 문제가 없지만 한 화면에서 다른 화면으로 이동할 때 찾을 수있는 바로 가기가 없습니다. –

+0

마우스 포인터를 움직이는 것처럼 움직이지만, 클릭하지 않고 레이즈/포커스를 보냅니다. –

+0

좋은 아이디어! 그것은 Alt + Esc가하는 것처럼 보입니다. 이제 그걸 보내는 법을 알아야합니다. –

2

예, 다소 이해했습니다. 어쨌든 방법입니다 보인다

{ 
#include <X11/extensions/XTest.h> 
XTestFakeButtonEvent(display, 1, True, CurrentTime); 
XTestFakeButtonEvent(display, 1, False, CurrentTime); 
XFlush(display); 
} 

... 그리고 메이크에서 LDFLAGS 라인에 "-lXtst"를 추가합니다.

Xlib는 너무 피비린 것처럼 보입니다. 다른 라이브러리를 사용하기위한 조언을 받았으므로, 어떻게 바꾸는 지 알고 싶습니다.

감사합니다.

2

xdotool은이 작업을 쉽게 수행 할 수있는 방법입니다. 명령 줄 도구입니다. 간단한 스크립트에서 사용할 수 있습니다. 예 :

#!/bin/sh 
xdotool mousemove x y 
xdotool click 1 
+0

감사합니다. 흥미로운 프로그램입니다. 내 'movemouse'보다 좋아 보이는데, 내 것이 단순한 마우스 이동에 더 좋습니다. –

관련 문제