Linux: aktuell laufendes Programm

Gast #1558126
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.
Gast #1558198
Lesenswert?

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 #1558368
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?
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 #1558377
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren