Nowe posty

Autor Wątek: [C++] Wcisniecie klawisza  (Przeczytany 5602 razy)

Macok

  • Gość
[C++] Wcisniecie klawisza
« dnia: 2008-10-17, 15:25:31 »
Jak w C++ zaimitowac wcisniecie klawisza?
Na windowsie mozna to bylo zrobic tak:
SendMessage(okienko,WM_KEYDOWN,VK_A,0);
A jak jest na Linuksie?

  • Gość
[C++] Wcisniecie klawisza
« Odpowiedź #1 dnia: 2008-10-17, 19:37:18 »
zależy jakiej biblioteki używasz (w windowsie używałeś Win32 API, które dostarcza funkcję SendMessage()) i co chcesz osiągnąć.

Jeśli piszesz program w jakiejś bibliotece przeznaczonej do tworzenia GUI (Qt, GTK), to skorzystaj z funkcji dostępnych w tych bibliotekach. (Jeśli to wciśnięcie klawisza ma być widziane tylko przez twój program.)

Jeśli chodzi ci o coś bardziej nisko poziomowego, to możesz skorzystać z API, które dostarcza X Server (wyżej wymienione biblioteki korzystają właśnie z X Servera do takich rzeczy jak obsługa wciśniętych klawiszy, itp).

Możesz także zainteresować się biblioteką SDL - jest to warstwa nad X Serverem do pisania programów multimedialnych, dostępna pod wiele systemów operacyjnych (na Windowsie wykorzystuje biblioteki windowsowe, pod Uniksem - uniksowe, czyli X Server właśnie). Chociaż nie pamiętam za bardzo czy akurat w SDLu można imitować wciśnięcie klawisza (ale warto sprawdzić).

Macok

  • Gość
[C++] Wcisniecie klawisza
« Odpowiedź #2 dnia: 2008-10-17, 19:42:43 »
No wlasnie o to chodzi, ze chce aby to klikniecie klawisza "zadzialalo" dla zupelnie innego okna.
Niestety nie znam C++ na tyle dobrze, zeby cokolwiek napisac w oparciu o to co napisales.
Skoro mam korzystac z X'owego Api, to gdybys mogl podac jeszcze jakiej funkcji uzyc to bylbym wdzieczny :)

  • Gość
[C++] Wcisniecie klawisza
« Odpowiedź #3 dnia: 2008-10-18, 13:02:34 »
No ja niestety nie znam się na programowaniu bezpośrednio X Servera. Może ktoś inny na forum wie coś więcej na ten temat?

Macok

  • Gość
[C++] Wcisniecie klawisza
« Odpowiedź #4 dnia: 2008-10-19, 11:02:26 »
Udało sie, dzieki.
Przerobiłem troche kod znaleziony tutaj:
http://debian.linux.pl/viewtopic.php?t=4971
Tak, by wysyłał sygnał o naciśnięciu klawisza o podanym kodzie ASCII.
Tylko teraz mam problem... jakie są kody ASCII strzałek?

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
[C++] Wcisniecie klawisza
« Odpowiedź #5 dnia: 2008-10-19, 11:15:00 »
Polecam dokumentację http://tronche.com/gui/x/xlib/

Co do odczytywania kodów klawiszy, to można użyć programu xev.

I raczej radzę nie polegać na ascii, ale na kodach klawiszy XK_ zdefiniowanych w X11/keysymdef.h

Macok

  • Gość
[C++] Wcisniecie klawisza
« Odpowiedź #6 dnia: 2008-10-19, 19:40:51 »
Juz wszystko ok, dzieki :)