Jak wysłać tab+spacja do dowolnego programu ?

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
zapytywacz
Piegowaty Guziec
Piegowaty Guziec
Posty: 9
Rejestracja: 15 lis 2010, 17:54
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

Jak wysłać tab+spacja do dowolnego programu ?

Post autor: zapytywacz »

Witam,

W jaki sposób można wysłać kombinację klawiszy Tab+spacja do dowolnego programu ?
Próbowałem za pomocą skryptu bash i xdotool:

Kod: Zaznacz cały

#!/bin/bash
xdotool keydown Tab;
xdotool keydown space;   
xdotool keyup space;            
xdotool keyup Tab;     
Gdy taki skrypt uruchamiam w terminalu - to działa.
Gdy zrobię skrót pod klawiszem F11 i tam podepnę skrypt - nie działa :-/
Zastosowanie powyższego zapewne odgadli już kurnikowi gracze ;-)
Aby rzucić bądź wziąć kartę używając klawiatury konieczna jest ta właśnie kombinacja.
Wiadomo że używanie 1 przycisku zamiast 2 będzie wygodniejsze...
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: Jak wysłać tab+spacja do dowolnego programu ?

Post autor: beluosus »

Sprawdź:
- czy skrypt na pewno się uruchamia.
- czy "F11 keyup" nie jest łapany jako kombinacja (np. dodaj sleep na początku).
- czy aplikacja chwilowo nie traci focusa (albo sam plugin). Być może widać, że belka na chwilę staje się nieaktywna.
- nie wystarczy "xdotool key Tab+space"?
- średniki na końcach linii są zbędne w bash.
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
zapytywacz
Piegowaty Guziec
Piegowaty Guziec
Posty: 9
Rejestracja: 15 lis 2010, 17:54
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: Jak wysłać tab+spacja do dowolnego programu ?

Post autor: zapytywacz »

beluosus pisze: - czy skrypt na pewno się uruchamia.
tak
- czy "F11 keyup" nie jest łapany jako kombinacja (np. dodaj sleep na początku).
Nie do końca rozumiem co miałeś na myśli... Próbowałem dokładać sleep w różnych miejcach skryptu i zachowywał się.... dziwnie. Gdy wstawiłem sleep 0.1 - żadnych zmian.
Gdy wstawiłem sleep 0.5 pomiędzy naciśnięciem a puszczeniem spacji - wysyłał spacje kilkanaście razy (tak jakbym trzymał spację długo).
- czy aplikacja chwilowo nie traci focusa (albo sam plugin). Być może widać, że belka na chwilę staje się nieaktywna.
Nie wiem czy o to chodzi.... ale gdy np. mam otwarty gedit i naciskam F11 - znika kursor. Kolor belki nie zmienia się, ale dokąd trzymam F11 nie widać kursora.
- nie wystarczy "xdotool key Tab+space"?
Nie, to nie działa. Właśnie przetestowałem skrypt:
xdotool key a
Gdy uruchomię go w terminalu przez ./skrypt to wypisze w terminalu: a
Jeśli nacisnę F11 (do którego jest podpięty) - nie działa - nawet jeśli aktywnym oknem jest terminal (kursor zmienia kolor po naciśnięciu F11 - jak pisałem powyżej)
- średniki na końcach linii są zbędne w bash.
Przyzwyczajenie z innych języków ;-)
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: Jak wysłać tab+spacja do dowolnego programu ?

Post autor: beluosus »

zapytywacz pisze:Nie do końca rozumiem co miałeś na myśli... Próbowałem dokładać sleep w różnych miejcach skryptu i zachowywał się.... dziwnie. Gdy wstawiłem sleep 0.1 - żadnych zmian.
Chodzi mi o to, że sytuacja może wyglądać tak:
- klikasz F11, F11 keydown
- uruchomienie skryptu
- wykonanie pierwszej linii (xdotool keydown Tab)
- puszczasz klawisz, F11 keyup
- wykonanie reszty linijek
W takim wypadku aplikacja dostanie skrót Tab+F11+space dlatego warto dodać sleepa na początku.
zapytywacz pisze:Gdy wstawiłem sleep 0.5 pomiędzy naciśnięciem a puszczeniem spacji - wysyłał spacje kilkanaście razy (tak jakbym trzymał spację długo).
No to chyba logiczne, że jak klawisz jest wciśnięty to wpisuje się kilka razy.
zapytywacz pisze:Nie wiem czy o to chodzi.... ale gdy np. mam otwarty gedit i naciskam F11 - znika kursor. Kolor belki nie zmienia się, ale dokąd trzymam F11 nie widać kursora.
Czyli traci focusa, a sygnały idą w niebyt. ;) Spróbowałem u siebie i też tak się dzieje ale jak dam np "sleep 1" na początku i nacisnę F11 to w aktywnym oknie "xdotool type lol" wykonuje się z widocznym efektem. Może spróbuj "windowactivate" ale nie wiem jak to z pluginami jest, albo chociaż "mousemove+click". Pamiętaj o opóźnieniach, bo zanim okno się aktywuje to może się wykonać kolejne polecenie.

Najlepiej by było jakbyś dał link do gry to bym sprawdził. Ewentualnie napisz do autorów. :)
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
zapytywacz
Piegowaty Guziec
Piegowaty Guziec
Posty: 9
Rejestracja: 15 lis 2010, 17:54
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: Jak wysłać tab+spacja do dowolnego programu ?

Post autor: zapytywacz »

beluosus pisze:Chodzi mi o to, że sytuacja może wyglądać tak:
- klikasz F11, F11 keydown
- uruchomienie skryptu
- wykonanie pierwszej linii (xdotool keydown Tab)
- puszczasz klawisz, F11 keyup
- wykonanie reszty linijek
W takim wypadku aplikacja dostanie skrót Tab+F11+space dlatego warto dodać sleepa na początku.
To raczej niemożliwe. Klikam F11 i trzymam 0,5 sekundy - więc napewno cały skrypt się wykonuje.
Czyli traci focusa, a sygnały idą w niebyt. ;) Spróbowałem u siebie i też tak się dzieje ale jak dam np "sleep 1" na początku i nacisnę F11 to w aktywnym oknie "xdotool type lol" wykonuje się z widocznym efektem.
U mnie jest podobnie. Tylko że.... nie moge sobie pozwolić na żadne opóźnienie :-)
Tutaj chodzi o to aby wysłać alt+tab jak najszybciej.

Może spróbuj "windowactivate" ale nie wiem jak to z pluginami jest,
Nie mam pojęcia jak się to wykorzystuje, a w dokumentacji jakoś mętnie było opisane...
I nie wiem o jakich pluginach mówisz :)
albo chociaż "mousemove+click". Pamiętaj o opóźnieniach, bo zanim okno się aktywuje to może się wykonać kolejne polecenie.
Mousemove+click próbowałem - i to też nie działa.
Gdy opóźnienie jest duże - to zadziała. Gdy ustawie 0.01 - to już nie.
A ja chcę aby to działało błyskawicznie.
Najlepiej by było jakbyś dał link do gry to bym sprawdził. Ewentualnie napisz do autorów. :)
http://www.kurnik.pl/pan/
Autorów kurnika czy xdotool ? ;-)
zapytywacz
Piegowaty Guziec
Piegowaty Guziec
Posty: 9
Rejestracja: 15 lis 2010, 17:54
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: Jak wysłać tab+spacja do dowolnego programu ?

Post autor: zapytywacz »

BUMP.
Czy ktoś ma jakiś pomysł jak to rozwiązać ? Bo mnie się ciągle nie udało...
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: Jak wysłać tab+spacja do dowolnego programu ?

Post autor: beluosus »

Tym razem podszedłem do problemu praktycznie. ;) Spróbuj tak:

Kod: Zaznacz cały

#!/bin/bash

xdotool keyup F9 # klawisz, którym uruchamiasz skrypt
xdotool key Tab+space
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
zapytywacz
Piegowaty Guziec
Piegowaty Guziec
Posty: 9
Rejestracja: 15 lis 2010, 17:54
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: Jak wysłać tab+spacja do dowolnego programu ?

Post autor: zapytywacz »

heh, nie wiem jak Ty na to wpadłeś :-)
Jesteś genialny ! :-)
Dzięki wielkie za pomoc. Działa świetnie.
Mam wrażenie, że jak pisze na to forum, to jedyną osobą od której mogę uzyskać konstruktywną odpowiedź jesteś Ty ;-)
Kiedyś pisałem z innego nicka i też tylko Ty odpisywałeś na temat :-)
Pozdrawiam i jeszcze raz dziękuje.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 7 gości