Entwickler-Ecke
Dateizugriff - Externes Programm aus Systemtray beenden [gelöst]
oPPi - Fr 01.08.03 01:37
Titel: Externes Programm aus Systemtray beenden [gelöst]
Hallo,
ich bin grad dabei mir nen kleines Fernwartungstool in Verbindung mit dem VNC-Server zu schreiben. Jetzt stehe ich vor dem Problem wie kann ich das VNC-Server Programm (C:\Programme\RealVNC\WinVNC\winvnc.exe) welches sich nach dem erfolgreichen Verbinden mit der Gegenstelle noch im Systemtray
befindet über mein Tool (Schaltfläche) beenden?
Ich hab jetzt schon einige Seiten durchforstet aber das passende hab ich nicht gefunden. Vielleicht weiß ja von euch einer Rat.
Gruß
oPPi
toms - Fr 01.08.03 07:00
Möchtest du nur das TrayIcon entfernen?
BungeeBug - Fr 01.08.03 10:00
Hi,
deine Freunde werden
FINDWINDOW und
SENDMESSAGE sein.Wenn du jetzt noch nen bissel in der Hilfe und der Boardsuche kramst wirdst du schnell glücklich :)
Moderiert von
Tino: DF-Tag hinzugefügt.
oPPi - Fr 01.08.03 13:35
Hy,
@toms: so wie es aussieht trägt sich das programm nur als trayicon ein. sofern der vnc-server nicht als service automatisch gestartet wird. das ist eigentlich auch beabsichtigt, das es nicht als service gestartet wird sondern manuell über mein tool.
@Cruiser23: thanks, hab ne funktion gefunden die mir das handle von WinVNC listet.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| function FindWindowByTitle(WindowTitle: string): Hwnd; var NextHandle: Hwnd; NextTitle: array[0..260] of char; begin NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST); while NextHandle > 0 do begin GetWindowText(NextHandle, NextTitle, 255); if Pos(WindowTitle, StrPas(NextTitle)) <> 0 then begin Result := NextHandle; Exit; end else NextHandle := GetWindow(NextHandle, GW_HWNDNEXT); end; Result := 0; end; |
So wenn ich jetzt nen cklick auf
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.Button1Click(Sender: TObject); var h: hwnd; begin h := FindWindowByTitle('WinVNC'); if h <> 0 then ShowWindow(h, SW_NORMAL) else ShowMessage('Nicht gefunden'); end; |
ausführe, wird mir das WinVNC Tray Icon als Handle angezeigt und ich kann es dann über den Schließen Button beenden Es wird dadurch auch die winvnc.exe geschlossen.
Wie kann ich jetzt das gefundene Handle direkt ohne nochmaliges Anzeigen beenden
Moderiert von
Tino: Delphi-Tags hinzugefügt.
UC-Chewie - Fr 01.08.03 14:29
Durch ShowWindow wird das Fenster angezeigt. Lass das also weg und schick eine WM_CLOSE-Message an das Fenster:
Delphi-Quelltext
1:
| SendMessage(h, WM_CLOSE, 0, 0); |
oPPi - Fr 01.08.03 14:51
Hurra jetzt funzt es :D
I thank's for this help very much...
So und hier für alle der komplette Lösungsweg:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| { Funktion zum finden des gesuchten Handles} function FindWindowByTitle(WindowTitle: string): Hwnd; var NextHandle: Hwnd; NextTitle: array[0..260] of char; begin // Get the first window NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST); while NextHandle > 0 do begin // retrieve its text GetWindowText(NextHandle, NextTitle, 255); if Pos(WindowTitle, StrPas(NextTitle)) <> 0 then begin Result := NextHandle; Exit; end else // Get the next window NextHandle := GetWindow(NextHandle, GW_HWNDNEXT); end; Result := 0; end; |
Und aufgerufen wird es z.B. über die Schaltfläche Beenden / Close:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| { Beenden der komplette Anwendung } procedure TForm1.btn_CloseClick(Sender: TObject); var h: hwnd; begin try h := FindWindowByTitle('WinVNC'); if h <> 0 then // Wenn WinVNC Handle gefunden SendMessage(h, WM_CLOSE, 0, 0) else ShowMessage('WinVNC nicht gefunden'); except Form1.Close; end; end; |
Dieses ist natürlich auf jedes Handle, was sich als Trayicon in die Taskbar neben der Uhr minimiert, anwendbar.
Gruß
oPPi
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!