8

Cを使用してLinuxでキー押下をシミュレートする方法はありますか?

私の特定の状況では、Ubuntu 9.04を使用しており、起動時に「一時停止」ボタンを押すことを呼び出すシンプルなアプリが必要です。これにより、FirefoxのiframeがJavascriptを使用して更新されます。

4

2 に答える 2

14

私はあなたが「X11アプリケーション」を意味していると思います-あなたが何をしようとしているのかはあなたの説明から完全には明らかではありません。以下のコードスニペットは、XTest拡張機能を使用してX11でキーボード入力フォーカスを現在持っているアプリケーションに「一時停止」キーコードを送信します。これは、キーボードイベントを「偽造」するための最も互換性のある方法です。これをシナリオに適用できるかどうかを確認してください(XOpenDisplayが成功したかどうかのエラーチェックは行わず、簡単にできます)。

#include <X11/Xlib.h>
#include <X11/keysym.h>
#include <X11/extensions/XTest.h>
...
Display *display;
unsigned int keycode;
display = XOpenDisplay(NULL);
...
keycode = XKeysymToKeycode(display, XK_Pause);
XTestFakeKeyEvent(display, keycode, True, 0);
XTestFakeKeyEvent(display, keycode, False, 0);
XFlush(display);

-lX11-lXtstとリンクする必要があります。

明らかに、Firefoxはその時点で焦点を合わせる必要があります。

しかし、私はあなたが達成しようとしているより大きなタスクが何であるかを知りたいと思います-キープレスイベントをスプーフィングするよりもエレガントな解決策があるはずだと思います。

于 2009-08-11T19:54:17.823 に答える
7

'xdotool'と呼ばれるプログラム可能なライブラリがあります。

sudo apt-get install libxdo-dev libxdo2

猫test.c

#include <stdio.h>
#include <stdlib.h>
#include <xdo.h>
#include <unistd.h>
int main() {
    xdo_t * x = xdo_new(":0.0");

    while(1) {
        printf("simulating Shift_L keypress\n");
        xdo_keysequence(x, CURRENTWINDOW, "Shift_L", 0);
        sleep(5);
    }

        return 0; 
}

このように実行します:

gcc test.c -lxdo -o test

于 2012-12-29T16:43:36.067 に答える