我正在尝试使用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) 我正在写一个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) 我正在使用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)
我应该保持显示打开并使用指针代替(我在一个函数中调用这些函数)我应该更多/更少经常刷新
谢谢
我正在尝试保存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
我究竟做错了什么.
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) 长话短说,我正在使用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中编写一个程序,我需要在函数中更改变量的值.
我已尝试全局设置变量,但在函数内部无法识别
所以我尝试了以下内容:变量是nobuttons:
readconfig(config2, &nobuttons);
void readconfig(FILE * config, int * buttons) {
buttons = 5;
}
Run Code Online (Sandbox Code Playgroud)
当我打印buttons它的值时,它显示为0(它被初始化为的值)
我究竟做错了什么?