1
우분투 12.04에서 xlib을 사용하여 마우스 클릭 이벤트를 보내려고합니다. 모든 작업이 데스크탑 바 아이콘에서 클릭을 할 때 작동합니다. 각 창 제목 표시 줄 (닫기, 최소화, 창 최대화)을 클릭하십시오. 그러나 일부 창에서는 내부 클릭이 작동하지 않습니다. 내 Qt 작성자 윈도우에서만 작동하지만, 예를 들어 집 폴더 아이콘을 클릭하면 폴더 안의 마우스, 폴더 나 메뉴 막대에서 클릭을 수행 할 수 없으며 창 제목 막대에서만 작동합니다.Xlib XSendEvent 클릭 이벤트가 우분투 12.04의 일부 창 안에서 작동하지 않습니다.
아마도 Ubuntu Unity 바탕 화면의 버그입니까? 여기에 내가 인터넷에서 찾아 내 코드입니다 :
#include <unistd.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
void mouseClick(int button)
{
Display *display = XOpenDisplay(NULL);
XEvent event;
if(display == NULL)
{
fprintf(stderr, "Errore nell'apertura del Display !!!\n");
exit(EXIT_FAILURE);
}
memset(&event, 0x00, sizeof(event));
event.type = ButtonPress;
event.xbutton.button = button;
event.xbutton.same_screen = True;
XQueryPointer(display, RootWindow(display, DefaultScreen(display)), &event.xbutton.root, &event.xbutton.window, &event.xbutton.x_root, &event.xbutton.y_root, &event.xbutton.x, &event.xbutton.y, &event.xbutton.state);
event.xbutton.subwindow = event.xbutton.window;
while(event.xbutton.subwindow)
{
event.xbutton.window = event.xbutton.subwindow;
XQueryPointer(display, event.xbutton.window, &event.xbutton.root, &event.xbutton.subwindow, &event.xbutton.x_root, &event.xbutton.y_root, &event.xbutton.x, &event.xbutton.y, &event.xbutton.state);
}
if(XSendEvent(display, PointerWindow, True, 0xfff, &event) == 0) fprintf(stderr, "Errore nell'invio dell'evento !!!\n");
XFlush(display);
usleep(100000);
event.type = ButtonRelease;
event.xbutton.state = 0x100;
if(XSendEvent(display, PointerWindow, True, 0xfff, &event) == 0) fprintf(stderr, "Errore nell'invio dell'evento !!!\n");
XFlush(display);
XCloseDisplay(display);
}
내 우분투는 VM웨어 플레이어의 내부가, 내가, Xlib를의 XWarpPointer를 사용하여 커서를 이동 어떤 도움 주셔서 감사합니다.
많은 (아마도 대부분의?) 프로그램이 XSendEvent에서 이벤트를 무시한다는 것을 읽었습니다. 가능한 해결 방법은 다음과 같습니다. http://www.semicomplete.com/blog/geekery/xsendevent-xdotool-and-ld_preload.html – tecu
감사합니다.이 문제가 발견 될 때 유용 할 것입니다.하지만 제 경우에는 그렇습니다. 간단한 폴더 창에서 클릭을 시도하고 작동하지 않으면 xdotools를 사용하여 동일한 작업을 시도한 다음 XSendEvent가 작동하지만 xdotools가 더 많은 작업을 수행하고 있습니다. –