![]() |
AW: Wie findet man Fenster, deren Namen man nicht genau kennt?
Dateinamen können natürlich auch von anderen Anwendungen verwendet werden, und Pfade sind öft vom Benutzer wählbar.
Mutexe und Atome sind noch ein Stichwort. Auch ein Tipp: mit Terminal Services siehst Du evtl. Prozesse, zu Denen Du keine Windows findest. |
AW: Wie findet man Fenster, deren Namen man nicht genau kennt?
Zitat:
Zitat:
Ganz recht. Und dazu schaut man eben über die vorgeschlagene Funktion FindWindowEx() zunächst nach, ob überhaupt ein Fenster mit dem partiellen Titel der zu erfragenden Applikation existiert. Falls nämlich nicht, hat sich die Sache bereits erledigt. Falls ja, dann kann man sich entscheiden: (a) die Zuordnung des Fensters ist aus dem Kontext unzweifelhaft eindeutig, womit das ohne weitere Abfragen geklärt wäre. (b) man muss/möchte auf Nummer Sicher gehen und etwaige Zweifel an der Zuordnung des Fensters zur erfragten Applikation beseitigen: man hat ja mit dieser Funktion FindWindowEx() gleichzeitig das zu eben diesem Fenster zugehörige Handle und holt sich nun mit Hilfe dieses Handles vermittels des Prozesses den Filenamen inkl. kompletten Pfad der Applikation, zu dem das Fenster gehört. Womit das dann - ohne "Wenn" und "Aber" - definitiv und ggf. auch für mehrere Fenster mehrerer Instanzen, geklärt wäre.
Code:
Im weiteren (insbes. zur noch benötigten RunningProcessesList()) siehe
function GetProcessNameFromWnd(Wnd: HWND): string;
var List: TStringList; PID: DWORD; I: Integer; begin Result := ''; if IsWindow(Wnd) then begin PID := INVALID_HANDLE_VALUE; Windows.GetWindowThreadProcessId(Wnd, @PID); List := TStringList.Create; try if RunningProcessesList(List, True) then begin I := List.IndexOfObject(Pointer(PID)); if I > -1 then Result := List[I]; end; finally List.Free; end; end; end; ![]() |
AW: Wie findet man Fenster, deren Namen man nicht genau kennt?
Zitat:
MSDN sagt zu ![]() Zitat:
Deswegen mein Tipp zu Techniken, die session-übergreifend funktionieren. |
AW: Wie findet man Fenster, deren Namen man nicht genau kennt?
Zitat:
Nur um keine Verwirrung aufkommen zu lassen: die von mir oben gepostete Funktion FindWindowEx() ist nicht die in der Unit deklarierte Funktion FindWindowEx() aus der MS-Systemlibrary user32.dll. Besser hätte ich die von mir gepostete Funktion wohl FindWindowPart() oder sonstwie nennen sollen, um diesen Unterschied klar zu machen. Letztlich stellt der neu angemerkte potentielle Remote-Effekt aber wohl das gleiche Problem für beide Funktionen dar. Davon allerdings, dass es sich hier in der Diskussion um ein Server-Client spezifisches Problem handeln könnte, war bisher jedoch nicht erkennbar die Rede. Dadurch wird die Fragestellung jetzt unerwartet mit einer erheblich anderen Zielrichtung aufgeworfen als ursprünglich gestellt. Oder ich hatte dahingehend etwas falsch verstanden ... |
AW: Wie findet man Fenster, deren Namen man nicht genau kennt?
Versuche einfach die nötigen Dateien exklusiv und mit Schreibrechten zu öffnen.
Geht das nicht, dann "Update nicht möglich, da Programm läuft oder Zugriffsrechte fehlen". |
AW: Wie findet man Fenster, deren Namen man nicht genau kennt?
Zitat:
MSDN lädt sich bei mir heute leider meist tot, daher kann ich nur blind die Lektüre zu den WTS*-Funktionen empfehlen :) |
AW: Wie findet man Fenster, deren Namen man nicht genau kennt?
Soll dieses Updateprogramm unbedingt selber geschrieben werden oder darf es auch was fertiges sein?
Dann würde ich z.B. InnoSetup vorschlagen. Laufende Instanzen des Programms werden von InnoSetup über einen Mutex erkannt. InnoSetup kann Dateien nachladen InnoSetup kann Dateien kopieren, auch wenn die Datei gesperrt ist (Neustart erforderlich) Für TerminalServices sollte ein globaler Mutex verwendet werden! Prefix
Code:
Global/
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz