C 使用xlib向窗口发送假按键事件
我正在尝试使用C和xlib向具有焦点的窗口发送假按键事件,以下是我的代码:C 使用xlib向窗口发送假按键事件,c,linux,xlib,C,Linux,Xlib,我正在尝试使用C和xlib向具有焦点的窗口发送假按键事件,以下是我的代码: #include <X11/Xlib.h> #include <X11/keysymdef.h> #define XK_A 0x041 int main() { Display *display = XOpenDisplay(NULL); //find out window with current focus: Window
#include <X11/Xlib.h>
#include <X11/keysymdef.h>
#define XK_A 0x041
int main()
{
Display *display = XOpenDisplay(NULL);
//find out window with current focus:
Window winfocus;
int revert;
XGetInputFocus(display, &winfocus, &revert);
//send key event to taht window
KeySym sym;
sym=XStringToKeysym("a");
//event definition
XKeyEvent event;
event.type=KeyPress;
event.keycode=XK_A;
event.display=display;
event.root=winfocus;
XSendEvent(display,winfocus,True,KeyPressMask,(XEvent *)&event);
return 0;
}
#包括
#包括
#定义XK_A 0x041
int main()
{
Display*Display=XOpenDisplay(空);
//查找具有当前焦点的窗口:
窗口winfocus;
int还原;
XGetInputFocus(显示,&winfocus,&revert);
//将密钥事件发送到taht窗口
键符号;
sym=XStringToKeysym(“a”);
//事件定义
XKeyEvent事件;
事件类型=按键;
event.keycode=XK_A;
事件显示=显示;
event.root=winfocus;
XSendEvent(显示、winfocus、True、按键掩码、(XEvent*)和事件);
返回0;
}
我试图使代码尽可能简单,我想将字母A发送到活动窗口
不过我觉得我做错了什么
谢谢
我尝试了以下代码:
#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Xresource.h>
#include <X11/Intrinsic.h>
#include <X11/extensions/XTest.h>
#include <unistd.h>
int main()
{
Display *dis;
dis = XOpenDisplay(NULL);
KeyCode modcode = 0; //init value
modcode = XKeysymToKeycode(dis, XK_B);
XTestFakeKeyEvent(dis, modcode, True, 0);
XFlush(dis);
sleep(1);
XTestFakeKeyEvent(dis, modcode, False, 0);
XFlush(dis);
modcode = XKeysymToKeycode(dis, XK_A);
XTestFakeKeyEvent(dis, modcode, True, 0);
XFlush(dis);
return 0;
}
#包括
#包括
#包括
#包括
#包括
#包括
int main()
{
显示*dis;
dis=XOpenDisplay(空);
KeyCode modcode=0;//初始值
modcode=XKeysymToKeycode(dis,XK_B);
XTestFakeKeyEvent(dis,modcode,True,0);
XFlush(dis);
睡眠(1);
XTestFakeKeyEvent(dis,modcode,False,0);
XFlush(dis);
modcode=XKeysymToKeycode(dis,XK_A);
XTestFakeKeyEvent(dis,modcode,True,0);
XFlush(dis);
返回0;
}
它反复按a键,如果我不使用睡眠功能,我无法释放该按钮,我无法一次键入字母,然后释放按键,这很像Linux问题上的一个示例(没有答案): 除了显而易见的(无错误检查)之外,或许看看其他人是如何解决问题的,也会给出一些提示:
- 正在发送按键/释放事件,以及关闭显示器(而不是可能不发送事件)
- ,是相似的
- 中的
文件使用xsendkeycode.c
清除事件XSync
- 我明白了。我不确定这是否是正确的方法,但它完成了任务。按键前的按键释放修复了所有问题
#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Intrinsic.h>
#include <X11/extensions/XTest.h>
int main() {
Display *dis;
dis = XOpenDisplay(NULL);
KeyCode modcode = 0; //init value
int i;
for (i=0;i<5;i++) {
modcode = XKeysymToKeycode(dis, XStringToKeysym("a"));
XTestFakeKeyEvent(dis, modcode, False, 0);
XFlush(dis);
sleep(1);
XTestFakeKeyEvent(dis, modcode, True, 0);
XFlush(dis);
XTestFakeKeyEvent(dis, modcode, False, 0);
XFlush(dis);
}
return 0;
}
#包括
#包括
#包括
#包括
int main(){
显示*dis;
dis=XOpenDisplay(空);
KeyCode modcode=0;//初始值
int i;
对于(i=0;i)正在使用hello
吗?感谢链接到linEAK和XSync
提示。它可以工作。其他链接无效。