gpt4 book ai didi

c - 使用 xlib 将假按键事件发送到窗口

转载 作者:IT王子 更新时间:2023-10-29 00:46:31 24 4
gpt4 key购买 nike

我正在尝试使用 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 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;
}

我尽量保持代码简单,我想将字母 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;
}

重复按 a 键,如果我不使用 sleep 功能,我无法释放该按钮,我无法输入一次字母然后释放按键

最佳答案

我明白了。我不确定这是否是正确的方法,但它可以完成工作。按键前的按键释放修复了所有问题。

#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;
}

这将输入 5 个“a”。

关于c - 使用 xlib 将假按键事件发送到窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30413316/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com