C# - Aktives Element in Taskleiste feststellen

Hallo,

-> Wie kann ich feststellen welches Element (Ordner, oder Anwendung) gerade aktiv in der Taskleiste, also im Vordergrund , ist?

-> Ich möchte gerne feststellen, ob cmd.exe, also eine Konsole gerade offen und im Vordergrund ist…

Danke & Grüße Roman

Die WinAPI-Funktion GetForegroundWindow() gibt dir das Handle des sich im Vordergrund befindlichen Fensters: http://pinvoke.net/default.aspx/user32.GetForeground…
In Verbindung mit GetWindowThreadProcessId() solltest du das lösen können: http://pinvoke.net/default.aspx/user32.GetWindowThre…

Grüße, JasonDelife.

Hallo JasonDelife,

Danke für deine Antwort, leider brauche ich noch etwas mehr Hilfe.
Für die DLL-Einbindung brauche ich:

using System.Runtime.InteropServices;

ist mir langsam klar, aber…

Die WinAPI-Funktion GetForegroundWindow() gibt dir das Handle
des sich im Vordergrund befindlichen Fensters:
http://pinvoke.net/default.aspx/user32.GetForeground…

bevor ich das testen kann, scheitere ich schon am einfachen kompilieren, also:

-> er kennt „ApplicationState“ und „AppState“ nicht, welches using brauche ich? Aus dem Beispiel geht das nicht für mich hervor:frowning:

-> Was ist hier mit „handle“ gemeint, was kann ich damit anfangen, wie verwerte ich das? Also ich muss irgendein/e Objekt/Variable für den Status erstellen, aber wie?

ApplicationState a = AppState;
if(a.Focused == ApplicationState.Focused){ /*…yeah…*/}

geht das so einfach?

-> Ist Focused == Vordergrund?

In Verbindung mit GetWindowThreadProcessId() solltest du das
lösen können:
http://pinvoke.net/default.aspx/user32.GetWindowThre…

-> Wozu brauch ich noch die ID, wenn ich mit obigen schon nach dem Namen nach prüfen kann, ob es läuft und fokussiert ist?

-> Warum der Link, wie war das genauer gemeint?

Grüße, JasonDelife.

Vielen Danke & Grüße,

Roman

hoi,

ich habe mir auch die beispiele von pinvoke.net mal angeschaut und meine das das erste NICHT praktikabel ist. das fängt bei den nicht angegebenen namensräumen an und endet bei der tatsache das ApplicationState eigentlich nur für Asp.Net verfügbar ist (zumindest ist mir nichts anderes bekannt).

die winApi funktion GetForegroundWindow() kann man zwar benutzen (auch wie in dem bsp. angegeben), aber ich denke du solltest dir mal allgemein das marshalling zwischen winApi und der clr anschauen:

  • aus der msdn

  • hier noch etwas konkretere bsp für dein anliegen:

  • hier

  • und hier

  • oder als gekapselte bibliothek hier

  • oder, wenn fortgeschrittener mit hooks hier

die andere funktion

GetWindowThreadProcessId()

benötigst du in dem kontext einfach deshalb weil es ja sein kann das du zb. 5x die konsole auf hast oder ähnliches, da diese dann ja erstmal den selben prozess-namen haben, nutzt man die prozessid um zwischen den fanstern weiter unterscheiden zukönnen…

ich hoffe das hilft dir erstmal ein bissl weiter.

greetz, me, mhb

1 Like

Hallo Mhb.Fake,

Das nenne ich eine Antwort :wink: Gut strukturiert und sinnvolle Kommentare. Ich werde mich die Tage damit beschäftigen, denn die Inhalte der Links klingen gut, aber Ich brauche auch etwas Zeit mit der Materie.

Grüße Roman