N
nice
Grünschnabel
Gelöst - Segmention fault - Fehlersuche (Anfänger)
[edit2]
Da man leider nicht auf seine eigenen Beitäge posten darf - warum auch immer - wollte ich mitteilen, dass das Problem gelöst ist!
hier der funktionierende Quelltext (kann ja sein, dass den mal jemand brauchen kann)
[edit2]
[edit]
Ich habe vergessen zu sagen, dass das ich das ganze auch bei
http://www.c-plusplus.de/forum/view...0-and-postorder-is-asc-and-highlight-is-.html
gepostet habe
[/edit]
Hallo,
ich habe versucht einen Code-Schnipsel den ich in irgendeinem Forum gefunden habe zu erweitern. Der Schnipsel gibt über XSendEvent() an ein vorher per Parameter festgelegtes Fenster 3 durch Parameter angegebene Tastatureingaben. Ich habe versucht diesen Schnipsel um die XGetInputFocus() Funktion zu erweitern. Ich bekomme das Programm auch compiliert, nur bei der Ausführung erhalte ich ein
Wie finde ich nun den Fehler? Und was habe ich falsch gemacht?
Danke schon mal!
Hier der Original-Schnippsel:
und hier mein Versuch die Erweiterung einzubauen:
[edit2]
Da man leider nicht auf seine eigenen Beitäge posten darf - warum auch immer - wollte ich mitteilen, dass das Problem gelöst ist!
hier der funktionierende Quelltext (kann ja sein, dass den mal jemand brauchen kann)
Code:
#include <stdio.h>
#include <stdlib.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <string.h>
int main (int argc, char *argv[]) {
Display *display;
Window focus_return;
int revert_to_return;
int i;
if (argc<3) {
printf("usage: ./sendkey key1 key2 key3 etc.\n\n");
return(1);
}
if ((display = XOpenDisplay(NULL)) == NULL)
{
printf("Unable to open display\n");
return 1;
}
XGetInputFocus(display, &focus_return,&revert_to_return);
for (i=3; i<argc; ++i) {
XEvent ev;
KeySym key;
ev.xkey.type=KeyPress;
ev.xkey.window=focus_return;
ev.xkey.root=ev.xkey.subwindow=None;
ev.xkey.time=0;
ev.xkey.x=ev.xkey.y=ev.xkey.x_root=ev.xkey.y_root=0;
ev.xkey.state=0;
key=XStringToKeysym(argv[i]);
ev.xkey.keycode=XKeysymToKeycode(display, key);
ev.xkey.same_screen=True;
XSendEvent(display, focus_return, True, KeyPressMask, &ev);
ev.type=KeyRelease;
XSendEvent(display, focus_return, True, KeyReleaseMask, &ev);
}
XCloseDisplay(display);
return(0);
}
[edit]
Ich habe vergessen zu sagen, dass das ich das ganze auch bei
http://www.c-plusplus.de/forum/view...0-and-postorder-is-asc-and-highlight-is-.html
gepostet habe
[/edit]
Hallo,
ich habe versucht einen Code-Schnipsel den ich in irgendeinem Forum gefunden habe zu erweitern. Der Schnipsel gibt über XSendEvent() an ein vorher per Parameter festgelegtes Fenster 3 durch Parameter angegebene Tastatureingaben. Ich habe versucht diesen Schnipsel um die XGetInputFocus() Funktion zu erweitern. Ich bekomme das Programm auch compiliert, nur bei der Ausführung erhalte ich ein
Code:
Segmention fault
Wie finde ich nun den Fehler? Und was habe ich falsch gemacht?
Danke schon mal!
Hier der Original-Schnippsel:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <string.h>
int main (int argc, char *argv[]) {
Display *dpy;
Window window;
char *s;
int i;
if (argc<3) {
printf("usage: ./sendkey windowid key1 key2 key3 etc.\n\n");
return(1);
}
if ((dpy=XOpenDisplay(NULL))==NULL) {
fprintf(stderr, "error: cannot open display\n\n");
return(1);
}
window=(Window)strtol(argv[1], &s, 0);
if (*s) {
fprintf(stderr, "error: bad windowID\n\n", s);
XCloseDisplay(dpy);
return(1);
}
for (i=2; i<argc; ++i) {
XEvent ev;
KeySym key;
ev.xkey.type=KeyPress;
ev.xkey.window=window;
ev.xkey.root=ev.xkey.subwindow=None;
ev.xkey.time=0;
ev.xkey.x=ev.xkey.y=ev.xkey.x_root=ev.xkey.y_root=0;
ev.xkey.state=0;
key=XStringToKeysym(argv[i]);
ev.xkey.keycode=XKeysymToKeycode(dpy, key);
ev.xkey.same_screen=True;
XSendEvent(dpy, window, True, KeyPressMask, &ev);
ev.type=KeyRelease;
XSendEvent(dpy, window, True, KeyReleaseMask, &ev);
}
XCloseDisplay(dpy);
return(0);
}
und hier mein Versuch die Erweiterung einzubauen:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <string.h>
int main (int argc, char *argv[]) {
Display *display;
Window *focus_return;
int *revert_to_return;
int i;
if (argc<3) {
printf("usage: ./sendkey key1 key2 key3 etc.\n\n");
return(1);
}
if ((display = XOpenDisplay(NULL)) == NULL)
{
printf("Unable to open display\n");
return 1;
}
XGetInputFocus(display, focus_return,revert_to_return);
for (i=3; i<argc; ++i) {
XEvent ev;
KeySym key;
ev.xkey.type=KeyPress;
ev.xkey.window=(int)focus_return;
ev.xkey.root=ev.xkey.subwindow=None;
ev.xkey.time=0;
ev.xkey.x=ev.xkey.y=ev.xkey.x_root=ev.xkey.y_root=0;
ev.xkey.state=0;
key=XStringToKeysym(argv[i]);
ev.xkey.keycode=XKeysymToKeycode(display, key);
ev.xkey.same_screen=True;
XSendEvent(display, (int)focus_return, True, KeyPressMask, &ev);
ev.type=KeyRelease;
XSendEvent(display, (int)focus_return, True, KeyReleaseMask, &ev);
}
XCloseDisplay(display);
return(0);
}
Zuletzt bearbeitet: