Linux: aktuell laufendes Programm

Gast
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.
Gast
Ich weiß nicht, ob es ein fertiges Tool dafür gibt, aber so geht es
jedenfalls auch:
1
#include <X11/Xlib.h>
2
#include <stdio.h>
3

4
int main() {
5
  Window focus;
6
  int revert;
7

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

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
1
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.
Gast
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?
1
#include <X11/Xlib.h>
2
#include <stdio.h>
3

4
int main() {
5
  Display *display;
6
  Window focus, root, parent, *children;
7
  Atom wm_state, type=None;
8
  unsigned long nitems, bytes_after;
9
  unsigned int nchildren;
10
  int revert, format;
11
  unsigned char *prop=NULL;
12

13
  display = XOpenDisplay(NULL);
14
  wm_state = XInternAtom(display, "WM_STATE", False);
15
  XGetInputFocus(display, &focus, &revert);
16
  for(;;) {
17
    XGetWindowProperty(display, focus, wm_state, 0, 0, False,
18
        AnyPropertyType, &type, &format, &nitems, &bytes_after, &prop);
19
    if(prop)
20
      XFree(prop);
21
    if(type)
22
      break;
23
    XQueryTree(display, focus, &root, &parent, &children, &nchildren);
24
    if(!parent)
25
      break;
26
    focus = parent;
27
  }
28
  printf("0x%lx\n", focus);
29
  return 0;
30
}
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.