我运行了一个简单的C代码,该代码首先打印所有活动窗口,并要求用户选择一个将键盘输入传达到的窗口。
我跨过XGrabKeyboard()函数,在其中可以指定可以抓取键盘的窗口。它运行正常。
例如,我将焦点设置在文本编辑器上,当我运行代码时,插入符号开始在文本编辑器中闪烁。但是问题在于它接收到o输入,并且行为就像冻结了键盘一样。
我的问题是XGrabKeyboard()到底在做什么?它是否只是用来控制键盘的控制,还是可以将键盘与某个窗口完全关联并开始在该窗口中进行任何键盘活动?还是应该总是抓住DefaultRootWindow()?
我遇到了很多问题,但它们并没有说明我的实际需求。
关于XGrabKeyboard():https://tronche.com/gui/x/xlib/input/XGrabKeyboard.html
// list holds window IDs received from a winlist function
list = (Window*)winlist(d,&len);
printf("And the window indices and names are...\n");
for (i=0;i<(int)len;i++) {
name = winame(d,list[i]);
printf("-->index = %d\t%s<--\n",i, name);
free(name);
}
int x;
printf("Select the window for which Keyboard should be grabbed (0 indexed) ");
scanf("%d",&x);
if(XGrabKeyboard(d, list[x], False, GrabModeAsync, GrabModeAsync, CurrentTime)!=0)//GrabSuccess)
printf("Keyboard grab failed for window = %s", winame(d, list[x]));
else
{
printf("Keyboard Grab Successful\n");
sleep(10);
}