使用xlib将伪造的按键事件发送到窗口

问题描述 投票:6回答:2

[我正在尝试使用C和xlib将虚假的keypress事件发送到具有焦点的窗口,这是我的代码:

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

它反复按下一个键,如果不使用睡眠功能,则无法释放该按钮,无法一次输入字母,然后释放按键

c linux xlib
2个回答
0
投票

这看起来很像Linux问题上的示例(无答案):XLib problem (XSendEvent)


-1
投票

知道了,不确定这是否是正确的方法,但是可以完成工作:按键释放之前的所有按键都固定了所有内容

© www.soinside.com 2019 - 2024. All rights reserved.