Segmention fault - Fehlersuche (Anfänger)

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)

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);
}
[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
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:

Ähnliche Themen

Unix Webserver mit HTML Seite erstellen

Prozesskommunikation mit PIPES - wie funktioniert das?

Ausführbare C-Datei von Mac OS auf Embedded Linux ausführen

[C] Speicherzugriffsfehler mit malloc

C HTTP request

Zurück
Oben