linux 模拟键盘输入到进程,Linux 下模拟键盘输入
发布日期:2021-06-24 10:01:27 浏览次数:4 分类:技术文章

本文共 3885 字,大约阅读时间需要 12 分钟。

基于GTK 与 Fakekey(将模拟键盘与PC机键盘链接在一起)

#include

#include

#include

#include

Display* disp ;

FakeKey *fk;

GtkWidget *win = NULL;

static char *numkeyboard_display[]=

{

"1\0", "2\0", "3\0", "+","4\0", "5\0", "6\0","-", "7\0", "8\0", "9\0", ".", "0\0", "←\0", "→\0", "Backspace\0", "Delete\0", "Enter\0"

};

static gushort numkeyboard_send[] =

{

XK_1, XK_2, XK_3, XK_plus, XK_4, XK_5, XK_6, XK_minus, XK_7, XK_8, XK_9, XK_period, XK_0, XK_Left, XK_Right, XK_BackSpace, XK_Delete, XK_Return

};

gboolean numbt_release (GtkWidget *widget, GdkEventButton *event,

gpointer user_data)

{

gint i = GPOINTER_TO_UINT(user_data);

fakekey_press_keysym(fk, numkeyboard_send[i], 0);

fakekey_release(fk);

return TRUE;

}

void clicked_callback(GtkButton *button1, GtkWindow *window)

{

gint j;

GtkWidget *button[5];

GtkWidget *vbox = gtk_vbox_new(FALSE, 5);

GtkWidget *hbox[5];

if(win)

{

gtk_widget_destroy (win);

win = NULL ;

}

else

{

win = gtk_window_new (GTK_WINDOW_POPUP);

hbox[0] = gtk_hbox_new(TRUE, 5);

for (j = 0 ; j < 4; j++ ) {

button[0] = gtk_button_new_with_label (numkeyboard_display[j]);

gtk_box_pack_start_defaults(GTK_BOX(hbox[0]), button[0]);

g_signal_connect(G_OBJECT(button[0]), "button-release-event",

G_CALLBACK(numbt_release), GUINT_TO_POINTER (j));

}

gtk_box_pack_start_defaults(GTK_BOX(vbox), hbox[0]);

hbox[1] = gtk_hbox_new(TRUE, 5);

for (j = 4 ; j < 8; j++ ) {

button[1] = gtk_button_new_with_label (numkeyboard_display[j]);

gtk_box_pack_start_defaults(GTK_BOX(hbox[1]), button[1]);

g_signal_connect(G_OBJECT(button[1]), "button-release-event",

G_CALLBACK(numbt_release), GUINT_TO_POINTER (j));

}

gtk_box_pack_start_defaults(GTK_BOX(vbox), hbox[1]);

hbox[2] = gtk_hbox_new(TRUE, 5);

for (j = 8 ; j < 12; j++ ) {

button[2] = gtk_button_new_with_label (numkeyboard_display[j]);

gtk_box_pack_start_defaults(GTK_BOX(hbox[2]), button[2]);

g_signal_connect(G_OBJECT(button[2]), "button-release-event",

G_CALLBACK(numbt_release), GUINT_TO_POINTER (j));

}

gtk_box_pack_start_defaults(GTK_BOX(vbox), hbox[2]);

hbox[3] = gtk_hbox_new(TRUE, 5);

for (j = 12 ; j < 15; j++ ) {

button[3] = gtk_button_new_with_label (numkeyboard_display[j]);

gtk_box_pack_start_defaults(GTK_BOX(hbox[3]), button[3]);

g_signal_connect(G_OBJECT(button[3]), "button-release-event",

G_CALLBACK(numbt_release), GUINT_TO_POINTER (j));

}

gtk_box_pack_start_defaults(GTK_BOX(vbox), hbox[3]);

hbox[4] = gtk_hbox_new(TRUE, 5);

for (j = 15 ; j < 18; j++ ) {

button[4] = gtk_button_new_with_label (numkeyboard_display[j]);

gtk_box_pack_start_defaults(GTK_BOX(hbox[4]), button[4]);

g_signal_connect(G_OBJECT(button[4]), "button-release-event",

G_CALLBACK(numbt_release), GUINT_TO_POINTER (j));

}

gtk_box_pack_start_defaults(GTK_BOX(vbox), hbox[4]);

gtk_container_add(GTK_CONTAINER(win), vbox);

gtk_window_move (GTK_WINDOW (win), 200, 200); /* 设置窗口位置 */

gtk_widget_show_all(win);

}

}

int main(int argc, char *argv[])

{

GtkWidget *window;

GtkWidget *button;

GtkWidget *entry;

GtkWidget *vbox;

gtk_init(&argc, &argv);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

gtk_window_set_title(GTK_WINDOW(window), "KeyBoard");

gtk_window_set_default_size(GTK_WINDOW(window),400,300);

disp = XOpenDisplay(NULL);//屏幕按键函数改成为内核驱动代发

if( disp == NULL )

return 1;

fk = fakekey_init(disp);

vbox = gtk_vbox_new(FALSE, 5);

button = gtk_button_new_with_label("弹出键盘");

gtk_widget_set_size_request(GTK_WIDGET(button),400,250);

gtk_box_pack_start_defaults(GTK_BOX(vbox), button);

entry = gtk_entry_new();

gtk_box_pack_start_defaults(GTK_BOX(vbox), entry);

gtk_widget_set_size_request(GTK_WIDGET(entry),400,50);

g_signal_connect(GTK_OBJECT(window), "destroy",G_CALLBACK(gtk_main_quit), NULL);

g_signal_connect(GTK_OBJECT(button), "clicked",G_CALLBACK(clicked_callback), window);

gtk_container_add(GTK_CONTAINER(window), vbox);

gtk_widget_show_all(window);

gtk_main();

return 0;

}

编译:

gcc  keyboard.c  -o keyboard `pkg-config --cflags --libs gtk+-2.0` -lfakekey

转载地址:https://blog.csdn.net/weixin_31974659/article/details/116692368 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:linux服务器上已安装R 用户下载R包,R语言安装R package的2种方法
下一篇:linux下装mysql重装,linux下MySql安装及重装

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月25日 00时13分22秒