В настоящее время я экспериментирую с xdotool для отправки ключей к процессу (я понимаю, что он может не работать для всех процессов, которые не устанавливают _NET_WM_PID). У меня возникли проблемы с отправкой нажатий клавиш в окна, отличные от фокуса. Он работает, если вы посылаете нажатия клавиш на CURRENTWINDOW
. Ниже приведен фрагмент, который я использовал для тестирования функциональности xdotool.Отправка нажатий клавиш X Window
extern "C"{
#include <xdo.h>
}
//extern "C" xdo_window_search
#include <iostream>
#include <string.h>
using namespace std;
int main(){
xdo_t* p_xdo = xdo_new(NULL);
// Allocate memory for search query.
xdo_search_t s;
// Clear the allocated memory.
memset(&s, 0, sizeof(xdo_search_t));
// Set the search query.
s.pid = 1916;
s.max_depth = -1;
s.searchmask = SEARCH_PID;
s.require = xdo_search::SEARCH_ANY;
// Allocate memory for output
Window* windows;
int no_windows;
xdo_window_search(p_xdo,&s,&windows,&no_windows);
cout << no_windows << endl;
// Prints all windows' names with matching criteria
for(int i=0;i<no_windows;i++){
unsigned char * name;
int size;
int type;
xdo_get_window_name(p_xdo,windows[i],&name,&size,&type);
cout << i << ":" << name << endl;
}
for(int i=0;i<no_windows;i++){
xdo_type(p_xdo,windows[i],"Hello World",0);
}
//xdo_type(p_xdo,CURRENTWINDOW,"Hello World",0); // This does work.
return 0;
}
В дополнение к тестированию функциональности xdotool я изучил исходный код xdotool. Интересно, что я нашел, что они используют Xtest для отправки нажатий клавиш в сфокусированное окно (CURRENTWINDOW
) и X11's XSendEvent
для других окон. Я обратился к xdotool, потому что я не мог заставить XSendEvent работать, и Xtest не может отправлять ключи в любые другие окна, кроме сфокусированного окна.
Я не правильно использую xdotool? Не работает xdotool со всеми ОС * nix с X11?
[Я бегу это на Ubuntu 13.04.]
EDIT
Итак, похоже, что делает работу, но не для всех окон, которые он находит. Например, он работает для firefox, но не gedit и gnome-terminal, хотя он нашел gedit и gnome-terminal своим pid. Это ведет себя по-другому, если я использовал CURRENTWINDOW
.
Итак, было бы здорово, если кто-нибудь сможет объяснить, почему это так. Например, связан ли флаг отправки силы с XEvent?
Просто комментарий: Я нашел sikuli быть весьма полезным при попытке отправки произвольных событий мыши и клавиатуры к окнам. Если вы не привязаны к xdotool, вы можете попробовать попробовать сикули. – TeTeT
Благодарим вас за предложение. Я не привязан к xdotool. Я уже реализовал решение через Xlib и Xtest. Я рассмотрю его, если мне нужно отправить произвольные события мыши. Спасибо. – swtdrgn