Autor Beitrag
HeftCD
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 91
Erhaltene Danke: 9

Win2k, WinXP, Win7, Win8
Delphi 3 Pro, Delphi 5, Delphi 7, Turbo Delphi, BC1
BeitragVerfasst: Di 01.11.11 21:55 
Originaltitel: Mit Delphi 5 - Prozessnamen festestellen und dessen Fenster minimieren.




Hallo,

ich frag mal hier für eine Freundin, der ich gerne helfen würde - da ich aber auch keinen rechten Plan davon hab.

Sie möchte ein anderes Programm im RAM steuern.

Zitat:


Hallo, vielleicht hat einer von Euch noch was rumliegen ...
ich möchte mit Delphi per Button
ein fremdes, laufendes Programm (z.B. ne Instanz von Notepad++) sowohl in den Tray (TNA) schicken (hide), als auch wieder herstellen (restore)

Denke mal
irgendwie prozess hwnd ermitteln
und dem dann ne message
hide / restore zuschicken.
SW_HIDE
SW_RESTORE

Habe aber jetzt keine Code-Beispiele gefunden.
Sonst sind mir immer wieder mal Threads beim lesen untergekommen, um die Window/ProzessID zum Namen eines Programms zu ermitteln - aber jetzt hab ich mit mehreren Stichworten versucht und nix gefunden.

Vielleicht hat ja jemand eine Idee, wie man das realisieren könnte?
(Code wäre natürlich auch ideal)

Leider hab ich hier noch Delphi 5 - andere neuere Delphi Versionen kann ich hier zur Zeit auch nicht installieren.
Aber das müßte eher fast alles über API gehn?


(nur wie ? :I)


Danke schon mal im Voraus.
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Di 01.11.11 22:17 
Prozeß-HWDNs gibt es nicht, weil das W für Window steht - das ist ein Handle für ein Fenster.

Für Prozesse gibt es Prozeß-Identifikationsnummern (PIDs) und - abhängig vom Öffnungs-/Zugriffsmodus - Prozeßhandles.

Man muß in der Tat dem Fenster solche Minimierungs- bzw. Wiederherstellungsbefehle schicken. Es gibt in den Foren genug Beispiele, wie man an alle Fenster eines Prozesses bzw. von allen Fenstern die dazugehörigen Prozeßnamen ermittelt (ersteres funktioniert n.m.W. über letzteres, ein Beispiel findet sich z.B. in Luckies Programm "WinInfo" (Michaels Puff Internetseite). Ansonsten kannst Du Dir, falls niemand eine bessere Idee hat, in meinem Program "Prozesse" anschauen, wie man sich die Fenster eines einzelnen Prozesses selektiv auflisten lassen kann. Allerdings muß der Minimierungsbefehl an ein bestimmtes Fenster (heißt das Hauptfenster?) geschickt werden. Wie man das ermittelt, ist mir nicht bekannt.

Ich bezweifele aber, daß man ein Fenster einfach so ins TNA/Systray verbannen kann - woher sollte die Ikone stammen? Vermutlich wird das Fenster beim Minimieren als Standard in die Taskleiste versenkt.
HeftCD Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 91
Erhaltene Danke: 9

Win2k, WinXP, Win7, Win8
Delphi 3 Pro, Delphi 5, Delphi 7, Turbo Delphi, BC1
BeitragVerfasst: Di 01.11.11 23:12 
mhh, das Icon des Programms ist während der Laufzeit permanent in der TNA vorhanden.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 01.11.11 23:17 
Problem ist aber auch noch was passieren soll, wenn mehrere Instanzen eines Programms laufen. Was soll dann passieren?

Dann müssen noch die TNA-Symbole für jeden Prozess erzeugt werden. Was aber, wenn der Prozess selber schon eines erzeugt?

Vom Prinzip her kann man mit EnumWindows alle Top-Level Fenster durchgehen und einfach alle minimieren, deren Prozess-ID die gewünschte ist (GetWindowThreadProcessId). Dann müssten noch die Fenster aus der Taskleiste entfernt werden (und gespeichert welche drin waren um das wiederherstellen zu können).

user profile iconHeftCD hat folgendes geschrieben Zum zitierten Posting springen:
mhh, das Icon des Programms ist während der Laufzeit permanent in der TNA vorhanden.
Wie meinst du das? Ich hatte das so verstanden, dass fremde Programme in die TNA minimiert werden sollen. :gruebel:
HeftCD Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 91
Erhaltene Danke: 9

Win2k, WinXP, Win7, Win8
Delphi 3 Pro, Delphi 5, Delphi 7, Turbo Delphi, BC1
BeitragVerfasst: Mi 02.11.11 00:30 
das zu minimierende Programm erzeugt bei seiem Start ein icon in der TNA.
Über dies kann es auch per Popmenü Item SHOW "restored" also wieder angezeigt werden.

So wie ich bisher von ihr erfahren habe ist wohl das Minimieren von Hand immer so schwer.

Daher wäre es mit einem Programm vermutlich einfacher, das zu HIDEn und wieder anzuzeigen (SHOW/RESTORE).
Wie gesagt, das Icon wird vom ZielProgramm permanent in der TNA angezeigt und erst bei seinem Beenden entfernt.



Vielleicht sind daher HIDE und SHOW die besseren Worte.