Решено: нужна подсказка xlib, мышка, корневое окно.

Модератор: Модераторы разделов

Аватара пользователя
komcumir
Сообщения: 273
ОС: Alt 5.0

Решено: нужна подсказка xlib, мышка, корневое окно.

Сообщение komcumir »

В общем требуется небольшое консольное приложение для X-ов которое в момент запуска, считает координаты курсора мышки и выдаст их в любом виде в саму консоль.

Столкнулся с такой трудностью (так как в прграмировании на си полный ноль). Получается вывод координат если мышка хотябы двинулась, а мне требуется считать кординаты мышки без каких то лишних манипуляций с ней, то есть запустил и получил координаты.

Код: Выделить всё

#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xos.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    Display *display;
    int screen_number;
    GC gc;
    XEvent report;
    int new_x, new_y;
    if ( ( display = XOpenDisplay ( NULL ) ) == NULL ) {
        puts ("Can not connect to the X server!\n");
        exit ( 1 );
    }
    screen_number = DefaultScreen ( display );
    XSelectInput ( display,XRootWindow (display, screen_number) ,PointerMotionMask);
    XNextEvent ( display, &report );
    gc = XCreateGC ( display, XRootWindow (display, screen_number), 0 , NULL );
    new_x = report.xbutton.x;
    new_y = report.xbutton.y;
    printf("Mouse button pressed at %i, %i\n", new_x, new_y);
    exit ( 0 );
    XFreeGC ( display, gc );
    return 0;
}
Спасибо сказали:
Аватара пользователя
Женя Подсыпальников
Сообщения: 482

Re: Решено: нужна подсказка xlib, мышка, корневое окно.

Сообщение Женя Подсыпальников »

XQueryPointer , должно быть... :)
Пойдём на рыбалку !
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Решено: нужна подсказка xlib, мышка, корневое окно.

Сообщение NickLion »

Я так понимаю Вам нужно вот это: XQueryPointer

Упс, успели раньше :)
Спасибо сказали:
Аватара пользователя
komcumir
Сообщения: 273
ОС: Alt 5.0

Re: Решено: нужна подсказка xlib, мышка, корневое окно.

Сообщение komcumir »

Понял что подходит, но вот не совсем понятно как юзать, ибо в си нуб (. Можно ли выкинуть кучу лишних переменных возвращаемых функцией или пропустить их?
Спасибо сказали:
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5

Re: Решено: нужна подсказка xlib, мышка, корневое окно.

Сообщение sergio »

komcumir писал(а):
22.07.2009 14:10
Понял что подходит, но вот не совсем понятно как юзать, ибо в си нуб (. Можно ли выкинуть кучу лишних переменных возвращаемых функцией или пропустить их?

Си не может "возвращать кучу переменных". Только одну. Вероятно имелись в виду поля структуры?
Не примите в обиду, но если взялись что-то творить на Си, то сперва надо его учить. И не на работе с Х сервер обычно учатся, честное слово...
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Решено: нужна подсказка xlib, мышка, корневое окно.

Сообщение NickLion »

Код: Выделить всё

#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xos.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    Display *display;
    int screen_number;
    int new_x, new_y, rx, ry;
    unsigned int modbut;
    if ( ( display = XOpenDisplay ( NULL ) ) == NULL ) {
        puts ("Can not connect to the X server!\n");
        exit ( 1 );
    }
    screen_number = DefaultScreen ( display );
    Window w = XRootWindow( display, screen_number );
    Window w_root, w_ch;
    XQueryPointer( display, w, &w_root, &w_ch, &rx, &ry, &new_x, &new_y, &modbut );
    printf("Mouse pointer at %i, %i\n", new_x, new_y);
    return 0;
}
Спасибо сказали:
Аватара пользователя
komcumir
Сообщения: 273
ОС: Alt 5.0

Re: Решено: нужна подсказка xlib, мышка, корневое окно.

Сообщение komcumir »

sergio писал(а):
22.07.2009 14:25
komcumir писал(а):
22.07.2009 14:10
Понял что подходит, но вот не совсем понятно как юзать, ибо в си нуб (. Можно ли выкинуть кучу лишних переменных возвращаемых функцией или пропустить их?

Си не может "возвращать кучу переменных". Только одну. Вероятно имелись в виду поля структуры?
Не примите в обиду, но если взялись что-то творить на Си, то сперва надо его учить. И не на работе с Х сервер обычно учатся, честное слово...
Мне не обидно все понимаю, но си как таковой мне никуда не уперся и изучать углубленно времени просто нет, просто нужно очень маленькое приложение ), Готового не нашел ).

вот что наваял

Код: Выделить всё

#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xos.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    Display *display;
    int screen_number;
    GC gc;
    Window win;
    int new_x, new_y,temp;
    if ( ( display = XOpenDisplay ( NULL ) ) == NULL ) {
        puts ("Can not connect to the X server!\n");
        exit ( 1 );
    }
    screen_number = DefaultScreen ( display );
    gc = XCreateGC ( display, XRootWindow (display, screen_number), 0 , NULL );
    if (XQueryPointer(display, XRootWindow (display, screen_number),
      &win, &win, &new_x, &new_y, &temp, &temp, 0)!=0) {
    printf("Mouse button pressed at %i, %i\n", new_x, new_y);
    }
    exit ( 0 );
    XFreeGC ( display, gc );
    return 0;
}
Видимо не совсем корректно ибо компилироваться компилируется но при выполнение дает "Ошибка сигментирования" ).

Тыкнете фейсом если не трудно в то что я делаю не правильно? )
Спасибо сказали:
Аватара пользователя
Женя Подсыпальников
Сообщения: 482

Re: Решено: нужна подсказка xlib, мышка, корневое окно.

Сообщение Женя Подсыпальников »

Код: Выделить всё

    Window root, child;
    int x, y, dummyx, dummyy;
    unsigned int dummymask;
    XQueryPointer(P1, P2, &root, &child, &x, &y,
                  &dummyx, &dummyy, &dummymask);


P1, P2 - яко у тебя в XSelectInput возьми,
а в x, y - результат...

Если "нет" скажет - обработать не забудь :)
Пойдём на рыбалку !
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Решено: нужна подсказка xlib, мышка, корневое окно.

Сообщение NickLion »

komcumir писал(а):
22.07.2009 14:35
вот что наваял

Код: Выделить всё

...
    if (XQueryPointer(display, XRootWindow (display, screen_number),
      &win, &win, &new_x, &new_y, &temp, &temp, 0)!=0) {
...
Видимо не совсем корректно ибо компилироваться компилируется но при выполнение дает "Ошибка сигментирования" ).

Тыкнете фейсом если не трудно в то что я делаю не правильно? )

последний 0 - идет обращение внутри функции по нулевому адресу, вот вам и ошибка.
Спасибо сказали:
Аватара пользователя
komcumir
Сообщения: 273
ОС: Alt 5.0

Re: Решено: нужна подсказка xlib, мышка, корневое окно.

Сообщение komcumir »

вкурил

ВСЕМ БОЛЬШОЕ СПАСИБО!
Спасибо сказали: