Ist ein Programm am laufen?
-
Hmmmm also wegen dem FindWindow: Also mein Programm hat ein sich immer ändernen Namen, der in der Tastleiste usw steht!
Was nun?
-
Handelt es sich nun um Dein Programm, oder um ein fremdes Programm.
Für den ersten Fall, siehe hier.
-
Es handelt sich um ein Fremdes.
Also nehmen wa z.B. Winamp, wie sollte da der Windowname lauten?
Denn wenn man ein Lied abspielt, ändert sich ja dieser ständig, nach der Beschreibung vom ersten Link!
-
Hallo
Du must eben mit FindWindow alles durchgehen und auf die verbleibenden Invarianten achten. Zum Beispiel bei WinAMP steht immer noch WinAMP im Fenstertitel, das kannst du mit geeingneten String-Funktionen suchen.
bis bald
akari
-
Und wie genau soll ich das machen?!
Also wie komme ich an die ganzen Namen oder wie du das meintest?!
-
Hallo
Sorry hab FindWindow mit EnumWindows verwechselt. Damit kannst du wie hier gezeigt alle Hauptfenster durchgehen. Dan must du nur noch den jeweiligen Fensternamen auf "Winamp" absuchen und hast dein Handle.
bis bald
akari
-
Nur noch eine kleine Frage, dann müsste ich damit fertig sein, wie bekomme ich nun von dem hWnd den Namen von dem Fenster raus, also mit welcher Funktion, genau?
-
Hallo
EnumWindows liefert dir Namen und Handle gleichzeitig. Schau dir nochmal den Code im zweiten Link an.
bis bald
akari
-
Und noch eins...
[C++ Error] Unit1.cpp(250): E2034 Cannot convert 'int (__stdcall TForm1::*)(void *,long)' to 'int (__stdcall *)()'
[C++ Error] Unit1.cpp(250): E2342 Type mismatch in parameter 'lpEnumFunc' (wanted 'int (__stdcall )()', got 'int (__stdcall TForm1::)(void *,long)')
-
Hallo
Du kannst keine Klassenmethode als Parameter an EnumWindows übergeben, nur klassenungebundene Funktionen und statische Membermethoden. Um trotzdem in der callback-Funktion Zugriff auf das Aufrufende Form zu haben nimmst du eben den zweiten Parameter
BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam) { TForm1* Form = reinterpret_cast<TForm1*>(lParam); // Mit Form arbeiten } void __fastcall TForm1::Button1Click(TObject* Sender) { EnumWindows(EnumWindowsProc, this); }bis bald
akari
-
Ok also bei Threads funktioniert das aber ohne weiters nicht, auf diesem Weg!
Also mein Ziel ist es ansich, dass sich ein Thread beendet, sobald ein bestimmtes Programm, wie z.B. Winamp nicht mehr läuft.
-
Hallo
Hättest du dieses "unwichtige" Detail gleich von Anfang an gesagt dann hätte man dir gleich zu WinAPI-Hooks geraten. Da das nun gar nichts mehr mit dem Builder an sich zu tun hat verschieb ich dich mal ins passende Forum.
bis bald
akari
-
Dieser Thread wurde von Moderator/in akari aus dem Forum VCL/CLX (Borland C++ Builder) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Ja sorry, ich hatte mir gedacht, dass es einen allgemeinen Weg gibt, der nicht nur auf Thready bezogen ist, so ne Funktion oder so...
Kannste mir denn bitte noch genauer sagen, wie das klappt, mitn Hooks?!
-
Such hier im Forum oder allgemein im inet. Das ist ein bissel komplexeres Thema, musst dich bissel reinlesen aber ist natürlich alles machbar

Sag bescheid wenn es irgendwo hapert aber komm nicht das du fertigen code willst das wird hier keiner machen
schirrmie