mikrocontroller.net

Forum: PC-Programmierung Linux: aktuell laufendes Programm


Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

Ich suche unter Linux die Möglichkeit, dass aktuell laufende Programm, 
welches gerade den Fokus besitzt, zu ermitteln.

Am besten mit einem einfachen Konsolenaufruf. Die Sprache ist aber 
prinzipiell egal


Grüße
Andy

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das wird dir so nicht gelingen. Das Fenster mit dem Fokus, je nach 
Fenstermanager und Toolkit, so ziemlich jeder Knopf, jedes Textfeld etc. 
sein; das liegt in der Natur von X.org.

Du musst dich vermutlich mal bei KDE/Gnome unschauen.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du einen Konsolenaufruf machst, ist doch genau diese Konsole im 
Vordergrund und hat den Fokus?

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich weiß nicht, ob es ein fertiges Tool dafür gibt, aber so geht es
jedenfalls auch:
#include <X11/Xlib.h>
#include <stdio.h>

int main() {
  Window focus;
  int revert;

  XGetInputFocus(XOpenDisplay(NULL), &focus, &revert);
  printf("0x%lx\n", focus);
  return 0;
}

Klaus Wachtler schrieb:
> Wenn du einen Konsolenaufruf machst, ist doch genau diese Konsole im
> Vordergrund und hat den Fokus?

Man kann das obige Programm aus der Konsole bspw. mit
sleep 3; focus

aufrufen und hat dann 3s Zeit, den Focus zu wechseln. Vielleicht möchte
man das Tool auch aus einem Skript, das ständig im Hintergrund läuft,
aufrufen.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, wie gesagt:
Das 'aktive Fenster' entspricht in den allermeisten Fällen nicht dem, 
was man sich landläufig unter 'Fenster' vorstellt.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sven P. schrieb:
> Das 'aktive Fenster' entspricht in den allermeisten Fällen nicht dem,
> was man sich landläufig unter 'Fenster' vorstellt.

Das hängt von der Definition von "landläufig" ab ;-)

So besser?
#include <X11/Xlib.h>
#include <stdio.h>

int main() {
  Display *display;
  Window focus, root, parent, *children;
  Atom wm_state, type=None;
  unsigned long nitems, bytes_after;
  unsigned int nchildren;
  int revert, format;
  unsigned char *prop=NULL;

  display = XOpenDisplay(NULL);
  wm_state = XInternAtom(display, "WM_STATE", False);
  XGetInputFocus(display, &focus, &revert);
  for(;;) {
    XGetWindowProperty(display, focus, wm_state, 0, 0, False,
        AnyPropertyType, &type, &format, &nitems, &bytes_after, &prop);
    if(prop)
      XFree(prop);
    if(type)
      break;
    XQueryTree(display, focus, &root, &parent, &children, &nchildren);
    if(!parent)
      break;
    focus = parent;
  }
  printf("0x%lx\n", focus);
  return 0;
}

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst es dann auch gleich per NetWM abfragen. Dann bekommst du das, 
was der Window-Manager als "aktives Fenster" ansieht. Siehe:
http://standards.freedesktop.org/wm-spec/wm-spec-l...

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, das wird schon besser. Nun musst du nur noch herausfinden, welches 
Rootfenster gemeint ist. dem Fenstermanager steht es ja frei, um jedes 
beliebige Rootfenster einer Anwendung noch weitere Rootfenster 
drumherumzuzeichnen...

Wie sagte es jemand so treffend: X is dead. Its funeral was years ago 
:-D

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

danke für die Antworten.

Werde die Codebeispiele mal testen sobald ich wieder am Linux-PC sitze

eine schönen Abend noch

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.