![]() |
Remotedesktop
hallo zusammen
Würde gerne von einem schließen Button aus eine Remoutdesktop verbindung aus einem Programm heraus Beenden. Geht das mit Delphi überhaupt? [edit=Matze]Titel korrigiert. Mfg, Matze[/edit] |
Re: Remoutdesktop
Zitat:
|
Re: Remoutdesktop
Es Er meint RemoteDesktop.
Evtl. geht es, indem du per ShellExecute die zugehörige Anwendung mit einem bestimmten Parameter aufrufst. Edit: Ups, ich habe dich versehentlich versächtlicht. *g* |
Re: Remoutdesktop
Hmm,
ich denke er will eine Remoteverbindung, die von einem Programm aufgebaut wurde, wieder abbauen, bzw. das Programm beenden. @ Matze: Es ist ein Er ;-) |
Re: Remoutdesktop
Genau das wollte ich damit sagen
:duck: |
Re: Remoutdesktop
Kennt Vielleicht jemand die anwendung und den Parameter????
|
Re: Remoutdesktop
Editiere bitte zukünftig deinen Beitrag. Wenn, dann müsste es
C:\WINDOWS\System32\mstsc.exe sein. |
Re: Remoutdesktop
Ok öffnen das Klappt wunderbar.
Aber wie kann ich die bestehende Verbinung abbrechen??
Delphi-Quellcode:
[edit=Matze]Delphi-Tags gesetzt. Mfg, Matze[/edit]
procedure TForm1.Button1Click(Sender: TObject);
begin begin if ShellExecute(Application.Handle,'Open',PChar('mstsc.exe'),Nil, Nil, SW_NORMAL) >= 31 then else begin MessageDlgPos(#9 + ' Es ist ein fehler aufgetreten',mtInformation,[mbOk],0,215,200); end; end; end; |
Re: Remoutdesktop
Du kannst auch das ActiveX importieren.
Ist bei mir als "Microsoft Terminal Services Control" in c:\<win-sys-verz>\mstscax.dll abgelegt. Dort gibt es dann so Ereignisse wie "OnConnected" etc. Vielleicht ist ja was passendes dabei. |
Re: Remoutdesktop
Und einfach so schließen über die ShellApi geht nicht?
|
Re: Remoutdesktop
Nein, da gibt es keine Parameter für. Man müsste es über
![]() ![]() machen. Das ist aber recht Unsicher find ich. |
Re: Remoutdesktop
Zitat:
Nach dieser Methode kann man sogar ein MsRdpClient1.Disconnect absetzen. |
Re: Remotedesktop
Kann man den Remoutedesktop wenn, er gestartet ist nicht einfach über denn Taskmanager abbrechen.
|
Re: Remotedesktop
Gibt's da nicht auch die entsprechenden APIs für?
|
Re: Remoutdesktop
Zitat:
Einfach eine leere Datei namens "Test.RDP" erstellen und dann rechter Mausklick->Bearbeiten und dann speichern. Über das Prozesshandle kann man die RemoteDesktop-Verbindung dann auch gewaltsam beenden. Der Prozess auf dem Server wird dann sicher noch weiterlaufen. |
Re: Remotedesktop
Na toll, schöhne Vorschläge.... Wenn ich WinXp beenden möchte ziehe ich ja auch einfach den Stecker
aus der Steckdose. :stupid: Ich würde wirklich den Vorschlag mit den ActiveX-Plugin verwenden. Das ist Programierstyle und ned Babarisch... :mrgreen: |
Re: Remotedesktop
Ich hab noch ein Verständnisproblem der Frage. Was hast du vor
1.) PC1 stellt eine Remotedesktopverbindung zu PC2 auf. Auf PC2 wird (per Remote) ein Programm gestartet welches die Verbindung trennen soll. 2.) PC1 stellt eine Remotedesktopverbindung zu PC2 auf. Auf PC1 wird ein Programm gestartet welches per Buttonklick den Remotedesktopclient beendet. |
Re: Remotedesktop
Oder kann man den Prozess der Remoteverbindung in dem Taskmanager beenden?
|
Re: Remotedesktop
Nein
Auf PC1 wird die Remotedesktop verbindung gestartet und das Programm auf PC2 gestartet. und nach dem arbeiten auf PC2 wird die Remoteverbinung dann mit einem Button in dem Programm auf PC2 beendet. |
Re: Remotedesktop
Zitat:
ist das dann nicht so, als ob die WindowsSession (in der das Programm läuft) auf PC2 beendet wird. Sollte dann auch nicht anders gehen als das wenn der Button betätigt wird - Windows geschlossen wird. Grüße Klaus |
Re: Remotedesktop
Das Programm auf PC2 wird ja nicht beendet sondern es wird auf das Anmelde Fenster zurück gesetzt
Delphi-Quellcode:
hier müsste jetzt noch was rein um die Remoteverbindung zu beenden.
procedure TForm2.Button5Click(Sender: TObject);
var pt: TPoint; begin if MessageDlgPos('Wollen sie sich wirklich Abmelden? ',mtInformation,[mbYes,mbNo],0,300,200) = mrYes then begin Form1.Show; Form2.Close; begin pt := Point( Width + 300, Top + 100); Mouse.CursorPos := ClientToScreen(pt) end; end; end; |
Re: Remotedesktop
Was denn nun? Willst Du die Verbindung oder die Session beenden?
Wenn Du nur die Verbindung kappst läuft die Session auf dem Server weiter (blockiert in der Regel eine CAL) und kann wieder verbunden werden beim nächsten Connect. Im zweiten Fall wird der User sauber abgemeldet und die Verbindung dann gekappt. |
Re: Remotedesktop
Zitat:
|
Re: Remotedesktop
Zitat:
Gemeint ist, ob die Sitzung wo Dein Programm läuft (PC2) beendet werden soll, also es soll sich abgemeldet werden (Start -> Abmelden). Wenn ja, dann mach dies doch einfach vom Programm aus (Hab den Aufruf jetzt nicht bei der Hand). |
Re: Remotedesktop
Das Problem bei der sache ist halt das die Maus beim Abmelden des Programms aus einen anderen Bildschirm gesetzt wird wie man oben sieht.
Die muss da auch bleiben, wenn ich die Remoteverbindung jetzt beenden will müsste ich ja wieder die maus bewegen um den schließen Button der Remoteverbindung zu betätigen und somit wäre die maus wieder auf dem Monitor wo sie nicht sein darf, deshalb wurde ich gerne beim Abmelden die Remoteverbindung beenden. Habe aber noch nichts gefunden womit ich das realiesieren könnte |
Re: Remotedesktop
Ich kapier es nicht. Welche Maus muss wo sein? Was seh ich oben?
Du baust in Dein Programm auf PC2 einen Button ein, der sich vom Windows in der Remotesitzung abmeldet. Die Sitzung wird beendet und die Verbindung getrennt. Nix mit Schliessen-Button |
Re: Remotedesktop
Richtig in meinem Proramm auf PC2 Soll über einen Button in meinem Programm die Remoteverbindung getrennt werden.
|
Re: Remotedesktop
:thumb: na dann, WinAPI-funktion gesucht und frisch ans Werk
![]() |
Re: Remotedesktop
Liste der Anhänge anzeigen (Anzahl: 1)
Ein ganz netter Beitrag abr der Funktioniert nicht so ganz wie ich das Brauch
Hab da was gefunden und auch schonmal was Probiert, das aufrufen klappt wunderbar wie vorher auch aber kann mir jemand sagen wie ich den Prozess killen kann. Hab es unten mal angehängt. ich glaube das geht schon so in die Richtung.
Delphi-Quellcode:
procedure KillProcess(hWindowHandle: HWND); var hprocessID: INTEGER; processHandle: THandle; DWResult: DWORD; begin SendMessageTimeout(hWindowHandle, WM_CLOSE, 0, 0, SMTO_ABORTIFHUNG or SMTO_NORMAL, 5000, DWResult); if isWindow(hWindowHandle) then begin // PostMessage(hWindowHandle, WM_QUIT, 0, 0); { Get the process identifier for the window} GetWindowThreadProcessID(hWindowHandle, @hprocessID); if hprocessID <> 0 then begin { Get the process handle } processHandle := OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION, False, hprocessID); if processHandle <> 0 then begin { Terminate the process } TerminateProcess(processHandle, 0); CloseHandle(ProcessHandle); end; end; end; end; procedure TForm1.Button1Click(Sender: TObject); begin KillProcess(FindWindow('mstsc',nil)); end; |
Re: Remotedesktop
Yes, if you can Disconnect or Logoff a session if you know (or obtain) the SessionID.
See ![]() ![]() Edit: sorry I didn't notice that this was a multipage thread, I was replying to: Zitat:
Edit2: Still after reading the rest of the topic, if you use either WTSDisconnectSession or WTSLogoffSession on the pc the session is running at you can achieve what you want. |
Re: Remotedesktop
Hi hat keiner mal einen brauchbaren Tipp mit dem ich mal was anfangen kann???
Bitte :freak: |
Re: Remotedesktop
Maybe I'm not understanding your question so I'll summarize:
You want to start a remote desktop from PC1 to PC2. In PC2 you start a program (your program), from this program you want to close the remote desktop session so you can return to you normal desktop, am I right? |
Re: Remotedesktop
Thats right!!!
|
Re: Remotedesktop
Hi,
Du kannst es auch über die Benutzerverwaltung steuern. Geh in die "Computerverwaltung -> Benutzer" Wenn Du einen Benutzer bearbeitest, gibt es den Reiter "Umgebung". Dort trägst Du bei "Folgendes Programm beim anmelden starten" Dein Programm ein. Beim verbinden wird nun nur das Programm aufgerufen und sonst nichts. Wenn das Programm beendet wird, wird auch die Verbindung wieder getrennt. Pass aber auf: Dateioperationen (Datei öffnen etc.) funktionieren noch. Man könnte also auch darüber z.B. den Task-Manager aufrufen und dann einen Explorer starten oder RegEdit (Rechte vorausgesetzt). In der Verwaltung kannst Du per "Terminaldienstekonfiguration" das ganze auch global setzen. Dort ist der Eintrag unter "Verbindungen -> RDP" zu finden (Doppelklick). Auch hier gibt es den Reiter "Umgebung". Auf jeden Fall wird das erreicht, was Du willst: TS wird gestartet -> Dein Programm läuft -> Dein Programm wird beendet -> TS wird korrekt beendet. Alles andere wäre murks... |
Re: Remotedesktop
use WTSDisconnectSession:
Delphi-Quellcode:
Uses JwaWtsApi32;
const SERVERNAME_CURRENT = HANDLE(0); LOGONID_CURRENT = ULONG(-1); var bRes: Boolean; bRes := WTSDisconnectSession(SERVERNAME_CURRENT, LOGONID_CURRENT, False); if bRes then begin Application.Terminate; end; |
Re: Remotedesktop
Das ist auch eine gut lösung und das wusste ich noch garnicht mal wieder was gelernt :warn:
Aber ich will mein Programm ja nicht beenden sonder nur abmelden es wird beim Button abmelden die Form1 angezeigt auf der die benutzeranmeldung ist mit Benutzername und Passwort die muss beim beenden der Remoteverbindung noch Offen sein. Deshalb muss ich auf der Form2 beim beenden die Remoteverbindung abbrechen das die Form1 noch offen bleibt bzw das Programm nicht beendet wird. |
Re: Remotedesktop
Zitat:
Zitat:
|
Re: Remotedesktop
Hi wollte nur mal fragen ob noch keiner ne lösung hat?
Hatte noch niemand dieses Problem. Wie gesagt dem Code oben den ich gefunden habe kann so Prozesse wie Notepad usw. aus dem Taskmanager killen aber nicht mstsc (Remotedesktop) warum? Wäre net wenn ihr vielleicht ne lösung für mein Problem hätte würde euch nie wieder belästigen :pale: :wink: |
Re: Remotedesktop
Zitat:
Aber: vielleicht bin ich zu blöd oder zu begriffsstutzig. Ich habe immer noch nicht wirklich geschnallt, was Du eigentlich machen möchtest. :drunken: Versuch es doch mal mit einer Zeichnung oder in Schritten. Die Lösung ist vielleicht ganz einfach, aber alle denken viel zu kompilizert darüber nach oder so... |
Re: Remotedesktop
I agree, it's not entirely clear what you want to accomplish. Did you try my solution? If you want to keep the application running just leave out the part with Application.Terminate. A disconnected sessions keeps on running.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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 by Thomas Breitkreuz