저는 우분투 16.10의 두 모니터에서 두 개의 전체 화면 응용 프로그램을 실행하고 있습니다. app1은 포인터가 필요하며 항상 초점을 맞추어야하므로 app1에 포인터를 잠글 필요가 있습니다.포인터 이동 이벤트를 캡처하고 영역에서 포인터를 제한하는 방법은 무엇입니까?
이 같은 포인터를 잡기 위해 도구를 작성했다 : 포인터의 이벤트를 캡처하고 APP1에서 포인터 숙박을 제한하지만, 포인터가 APP1에서 아무것도 작동하지 않을 수 있습니다
#include <stdio.h>
#include <X11/Xlib.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
Display *display;
XEvent xevent;
Window window;
int x,y;
void setPos(int x,int y){
XWarpPointer(display,None,window,0,0,0,0,x,y);
XFlush(display);
}
int main(int argc, char **argv){
if((display = XOpenDisplay(NULL)) == NULL)
return -1;
window = DefaultRootWindow(display);
XAllowEvents(display, AsyncBoth, CurrentTime);
XGrabPointer(display,window,0,PointerMotionMask,GrabModeAsync,GrabModeAsync,None,None,CurrentTime);
while(1) {
XNextEvent(display, &xevent);
switch (xevent.type) {
case MotionNotify:
if(xevent.xmotion.x_root>1920){
setPos(1920,xevent.xmotion.y_root);
}
break;
}
}
return 0;
}
이 도구. 모션을 제외한 모든 포인터 이벤트가 작동하지 않습니다. 코드에 대한 제안이 있습니까? 아니면 일을 끝내기위한 다른 아이디어?
이벤트를 다시 보내려면 ['SendEvent()'] (https://www.x.org/releases/X11R7.6/doc/libX11/specs/libX11/libX11.html#Sending_Events_to_Other_Applications)를보십시오. 실제로 대상 창을 찾아야 할 수도 있습니다. 나는 실제 코드를 게시하기 위해 X11에서 너무 녹슬지 만 이것은 좋은 단서가되어야한다. 또한 해당 설명서의 색인을 읽으십시오. 섹션 제목이 꽤 좋습니다 (이 경우 "다른 응용 프로그램으로 이벤트 보내기"). – unwind
나는이 방법을 사용했지만 작동하지 않았고 아무 것도 변경되지 않았습니다. XSendEvent (display, PointerWindow, True, ButtonPressMask, & xevent); 포인터가 클릭 한 창은 활성화되지 않았고 도구를 실행 한 터미널은 항상 활성화되었습니다. – user6731513