小编Ade*_*med的帖子

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

我正在尝试使用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;
}
Run Code Online (Sandbox Code Playgroud)

我试图让代码尽可能简单,我想把字母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 …
Run Code Online (Sandbox Code Playgroud)

c linux xlib

7
推荐指数
1
解决办法
7211
查看次数

gtk在对话框中显示对话框

我正在写一个gtk程序,在我的应用程序的某个时刻,我调用gtkdialog来获取用户的输入.我想要做的是关闭当前对话框并在单击"确定"按钮时打开另一个对话框,我已经有一个功能正在执行其他工作,在该功能中启动对话框会很棒.这是父对话框代码:

GtkWidget * new_button_dialog = gtk_dialog_new_with_buttons("new button",(GtkWindow *)container,GTK_DIALOG_DESTROY_WITH_PARENT,"OK", GTK_RESPONSE_OK,NULL);
       GtkWidget * content_area = gtk_dialog_get_content_area (GTK_DIALOG (new_button_dialog));
       GtkWidget * button_name_label = gtk_label_new ("Press escape at any time to cancel.\ntype in the button name");
       gtk_container_add (GTK_CONTAINER (content_area) , button_name_label);
       GtkWidget * button_name_entry = gtk_entry_new();
       gtk_entry_set_activates_default((GtkEntry*)button_name_entry,TRUE);
       gtk_container_add(GTK_CONTAINER(content_area), button_name_entry);
       GtkWidget * button_text_dialog = gtk_dialog_new_with_buttons("new button",(GtkWindow *)container,GTK_DIALOG_DESTROY_WITH_PARENT,"OK", GTK_RESPONSE_OK,NULL);
      gtk_container_add (GTK_CONTAINER (container), button);
       g_signal_connect(new_button_dialog,"response",G_CALLBACK (add_new_button),NULL);
gtk_signal_connect_object (GTK_OBJECT (button), "clicked",GTK_SIGNAL_FUNC (gtk_widget_show_all),(GtkWidget*)new_button_dialog);
       gtk_widget_show_all((GtkWidget *)container);
Run Code Online (Sandbox Code Playgroud)

c linux gtk dialog

7
推荐指数
1
解决办法
686
查看次数

Xtst和usleep

我正在使用Xtst扩展来键入并使用鼠标执行操作我没有遇到任何问题,直到我开始使用xtst移动并单击鼠标.

例如,这里有一组动作:移动359,216并点击(XTestFakeMotionEvent(显示,-1,359,216,0);)移动378,213并点击移动376,391并点击输入amousa1990@gmail.com,adel_ahmed @ something.com(字符串坏了到字符然后XTestFakeKeyEvent(显示,键码,True,0);这段代码在过去的几个月里一直运行正常,直到我开始使用鼠标移动并点击移动438,727并点击

大量其他点击

所发生的事情是所有鼠标移动工作正常,输入事件不会发送/同步,除非我使用usleep:100之前每个字母键入500之前每次点击700000之前每个鼠标移动

鼠标移动usleeps严重减慢应用程序的代码如下鼠标移动:

XFlush(display);
usleep(700000);
XTestFakeMotionEvent(display,-1,x_coordinate,y_coordinate,0);

XFlush(display);
  XCloseDisplay(display);
Run Code Online (Sandbox Code Playgroud)

我应该保持显示打开并使用指针代替(我在一个函数中调用这些函数)我应该更多/更少经常刷新

谢谢

linux xlib

7
推荐指数
1
解决办法
155
查看次数

保存gtk窗口位置

我正在尝试保存gtk窗口位置(绝对)以恢复它,我再次打开应用程序

到目前为止这是我的代码:

gint x,y;
  gtk_window_get_position(main_window,&x,&y);
  printf("current position is:\nx: %i\ny:%i\n",x,y);
Run Code Online (Sandbox Code Playgroud)

这个代码在应用程序退出时运行,我总是得到:当前位置是:x:0 y:0

我究竟做错了什么.

c linux gtk

6
推荐指数
1
解决办法
710
查看次数

XGetImage 需要很多时间来运行

XGetImage 执行需要 3-4 秒并完全冻结 X11

Display *display;
    display = XOpenDisplay(NULL);
if (!display) {fprintf(stderr, "unable to connect to display");return 7;}
    Window w;
    int x,y,i;
    unsigned m;
    Window root = XDefaultRootWindow(display);
if (!root) {fprintf(stderr, "unable to open rootwindow");return 8;}
    //sleep(1);
    if(!XQueryPointer(display,root,&root,&w,&x,&y,&i,&i,&m))
{  printf("unable to query pointer\n"); return 9;}
    XImage *image;
    XWindowAttributes attr;
    XGetWindowAttributes(display, root, &attr);
    image = XGetImage(display,root,0,0,attr.width,attr.height,AllPlanes,XYPixmap);
    XCloseDisplay(display);
if (!image) {printf("unable to get image\n"); return 10;}
Run Code Online (Sandbox Code Playgroud)

在 Xorg 日志中:

[ 13234.693] AUDIT: Thu Jan  7 20:12:13 2016: 3856: client 45 connected …
Run Code Online (Sandbox Code Playgroud)

c linux x11 xlib

4
推荐指数
1
解决办法
1169
查看次数

无法解密RSA加密密钥

长话短说,我正在使用DES而我正在使用RSA加密密码进行密钥交换,密码不超过16个字符问题是当我加密密钥时,加密的大小对我来说太大了解密这里是我的rsa加密和解密代码:

加密: - 我一直在尝试将localpwd作为"asd"

    byte[] plaintext = utf8.GetBytes(localpwd);
    byte[] ciphertext = rsaservice.Encrypt(plaintext, false);
    string cipherresult = Convert.ToBase64String(ciphertext);
Run Code Online (Sandbox Code Playgroud)

然后我打印文本框上的加密密钥并尝试解密

    byte[] ciphertext = utf8.GetBytes(filetest.Text);
    byte[] plain = rsaservice.Decrypt(ciphertext, true);
    string plaintext = utf8.GetString(plain);
Run Code Online (Sandbox Code Playgroud)

我得到"要解密的数据超过这个256字节模数的最大值".我尝试增加密钥大小,以便能够加密和解密更大的密钥大小,但增加密钥只会增加加密数据的大小导致相同的错误,请帮助!

c# security encryption rsa encryption-asymmetric

3
推荐指数
1
解决办法
4561
查看次数

从函数中改变变量值

我在c中编写一个程序,我需要在函数中更改变量的值.

我已尝试全局设置变量,但在函数内部无法识别

所以我尝试了以下内容:变量是nobuttons:

readconfig(config2, &nobuttons);

void readconfig(FILE * config, int * buttons) {
    buttons = 5;
}
Run Code Online (Sandbox Code Playgroud)

当我打印buttons它的值时,它显示为0(它被初始化为的值)

我究竟做错了什么?

c

1
推荐指数
1
解决办法
75
查看次数

标签 统计

c ×5

linux ×5

xlib ×3

gtk ×2

c# ×1

dialog ×1

encryption ×1

encryption-asymmetric ×1

rsa ×1

security ×1

x11 ×1