Laufende Anwendungen auslesen (Offene Fenster auslesen)
-
Hallo Community,
ich habe hier im Forum so einiges zum Thema Windows Prozesse auslesen
gefunden. Aber mich würde es interessieren ob es auch möglich wäre
nur die Programme und Fenster aus zu lesen die gerade offen sind.Wäre eine große Hilfe wenn mir einer auch konkrete Links angeben könnte.
Liebe Grüße!
-
Hallo
Hier ein kleines Beispiel um die Fenster auszulesen.
Stichwort: EnumWindows
Die CPP-Datei
void __fastcall TForm1::Button1Click(TObject *Sender) { //Liest alle Fenster aus. //Wichtig: Es werden nur TOP-Level Fenster aufgelistet EnumWindows((WNDENUMPROC)bcGetWindows, 0); } //--------------------------------------------------------------------------- BOOL CALLBACK bcGetWindows(HWND hwnd,LPARAM lParam) { char cFenstername[1024]={'\0'}; //Ermittelt den Fensternamen. GetWindowText(hwnd,cFenstername,1023); //Ausgabe des Fensternamens ShowMessage(AnsiString(cFenstername)); return TRUE; }
Und hier die Headerdatei:
#ifndef codeH #define codeH //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <ComCtrls.hpp> #include <map> //--------------------------------------------------------------------------- BOOL CALLBACK bcGetWindows(HWND, LPARAM); //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-verwaltete Komponenten TButton *Button1; void __fastcall Button1Click(TObject *Sender); private: // Benutzer Deklarationen public: // Benutzer Deklarationen __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif
Hoffe, konnte dir helfen.
Meines wissens wurde das ganze auch schon hier im Forum besprochen. Einfach mal Suchfunktion oder die Help des Builders benutzen.
-
Hi Deforation,
dein Beispiel Code ist auf jedenfall schonmal sehr interessant.
Jedoch Listes der Code nicht nur aktive Fenster auf sondern zeigt auch
die Anwendungen an die z.B. minimiert in der kleinen Icon Leiste rechts
unten im Startmenü angezeigt werden.Außerdem werden alle unter Fenster einer Anwendung angezeigt und jede Menge
komischen Müll der etwa so aussieht: "öö=))km/(" etc.Kannst du das bitte erläutern.
Gruß!
-
vll hilft dir das noch weiter:
http://www.marquardtnet.info/cecke/quickies.1/1_quicky_34.html
Das HWND kannst du ja auf seine Eigenschaften hin überprüfen. (Hauptfenster, etc)greetz KN4CK3R
-
Mit Hilfe des Handles, kannst du alles über das Fenster erfahren, was du wills. Da dies ja der eindeutige Identifikator ist.
So kannst du beispielsweise die Sichtbarkeit prüfen:
BOOL IsWindowVisible(HWND hWnd);Oder ob es sich überhaupt um ein Fenster handelt:
BOOL IsWindow(HWND hWnd);Allenfalls könntest du auch den Klassennamen prüfen:
int GetClassName(HWND hWnd,LPTSTR lpClassName,int nMaxCount);Denn es kann auch sein, dass Gewisse Handles -> Objekte keine Bezeichnung haben aber einen Klassennamen. Darum könntest du auch noch folgendes prüfen. Ob überhaupt eine Bezeichnung existiert.
if (cFenstername[0]!='\0') { //Fenster IO } else{ //Fenster nicht IO }
Vielleicht ist dies erläutert genut
-
Hi Deforation,
interessant. Finde ich nicht schlecht das man sich diese Informationen
"liefern" lassen kann.Jedoch muss ich gestehen das ich nicht weiß wie ich damit
korrekt umgehen kann, sprich: Wie kann ich den Wert der
zurück geliefert wird speichern und auswerten?BOOL IsWindow(HWND hWnd);
Das kenne ich garnicht.
Und den Rückgabewert so zu speichern und aus zu werten ist nicht möglich:bool Window; Window = BOOL IsWindow(HWND hWnd); if(Window == true){ ... }
Wie werten man diese Rückgabewerte aus?
Gruß!
-
Das ganze ist eigentlich so aufgebaut:
Wenn du das ganze hier nun auseinander nimmst. Bekommst du folgende Informationen:
BOOL IsWindow(HWND hWnd);
- BOOL: Der Rückgabewert der Funktion IsWindow();
- IsWindow: Name der Funktion
- HWND hWnd: Benötigter Parameter -> In diesemfall ein HWND was eigentlich für Handle steht.
Nun hasst du 2 Möglichkeiten das zu prüfen:
BOOL CALLBACK bcGetWindows(HWND hwnd,LPARAM lParam) { char cFenstername[1024]={'\0'}; bool bisWindow; //Ermittelt den Fensternamen. GetWindowText(hwnd,cFenstername,1023); //Der Fenstername wird nur Ausgegeben, wenn das Fenster Sichtbar ist. //Variante 1: ------------ if (IsWindow(hwnd)) ShowMessage(AnsiString(cFenstername)); //Variante 2: ------------ bisWindow=IsWindow(hwnd); if (bisWindow) ShowMessage(AnsiString(cFenstername)); return TRUE; }
Das gute ist ja, dass wir durch die CALLBACK-Funktion das Handle (HWND) bereits haben. So kannst du dies gleich verwenden.
-
Hallo Deforation,
vielen Dank für deine Erläuterung.
Jetzt habe ich es verstanden und kann es auch anwenden.Finde das super interessant und denke werde mich mit dem Thema
weiter beschäftigen.Gruß!