読者です 読者をやめる 読者になる 読者になる

Let's write β

趣味で書いたこととか、RustとLispが好き

XTESTを利用してオートクリッカー

C/C++

Synergyのソースコードを久々に読みなおして各OSでクリック動作など各動作を疑似再現する
方法を確認しなおしていたのでちょっと練習にとオートクリッカーをつくってみました。

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <X11/Xlib.h>
#include <X11/extensions/XTest.h>

void usage();
void finish(int sig);
//X11 Display
Display* dpy;

int main(int argc, char** argv)
{
        //Click margin
        int margin;
        if (argc <= 1) {
                usage();
                return -1;
        }
        if ((dpy = XOpenDisplay("")) == NULL) {
                fprintf(stderr, "Failed to open display\n");
                exit(-1);
        }
        margin = atoi(argv[1]);
        signal(SIGKILL, finish);
        while(1) {
                printf("CLick\n");
                //Click
                XTestFakeButtonEvent(dpy, 1, True, CurrentTime);
                XFlush(dpy);
                XTestFakeButtonEvent(dpy, 1, False, CurrentTime);
                XFlush(dpy);

                usleep(margin * 1000);
        }
        return 0;
}

void usage()
{
        printf("Usage:\n");
        printf("takahash [millsec]\n");
}

void finish(int sig)
{
        printf("Finish..");
        XCloseDisplay(dpy);
        exit(0);
}

指定された間隔をミリ秒として解釈してその間隔でクリックを連打するようにしています。
高橋名人の一秒16連打!!

./a.out 62

連打されます。

僕が働いているAzit.incでは一緒に働けるエンジニアを募集しています!
採用情報 — 株式会社アジット|Azit Inc.