Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Remotedesktop (https://www.delphipraxis.net/88236-remotedesktop.html)

SaFu 12. Mär 2007 13:56


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]

ghost007 12. Mär 2007 14:23

Re: Remoutdesktop
 
Zitat:

Zitat von fuknersascha
hallo zusammen

Würde gerne von einem schließen Button aus eine Remoutdesktop verbindung aus einem Programm heraus Beenden.

Geht das mit Delphi überhaupt?

ich weiß nich ob ich der einzigste bin, aber ich versteh die frage nich :oops: ...

Matze 12. Mär 2007 14:26

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*

Die Muhkuh 12. Mär 2007 14:26

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 ;-)

SaFu 12. Mär 2007 14:37

Re: Remoutdesktop
 
Genau das wollte ich damit sagen

:duck:

SaFu 12. Mär 2007 14:52

Re: Remoutdesktop
 
Kennt Vielleicht jemand die anwendung und den Parameter????

Matze 12. Mär 2007 14:57

Re: Remoutdesktop
 
Editiere bitte zukünftig deinen Beitrag. Wenn, dann müsste es

C:\WINDOWS\System32\mstsc.exe

sein.

SaFu 12. Mär 2007 15:10

Re: Remoutdesktop
 
Ok öffnen das Klappt wunderbar.

Aber wie kann ich die bestehende Verbinung abbrechen??

Delphi-Quellcode:
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;
[edit=Matze]Delphi-Tags gesetzt. Mfg, Matze[/edit]

Catbytes 12. Mär 2007 15:18

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.

SaFu 12. Mär 2007 15:49

Re: Remoutdesktop
 
Und einfach so schließen über die ShellApi geht nicht?

turboPASCAL 12. Mär 2007 15:52

Re: Remoutdesktop
 
Nein, da gibt es keine Parameter für. Man müsste es über Delphi-Referenz durchsuchenFindWindow und Delphi-Referenz durchsuchenSendMessage
machen. Das ist aber recht Unsicher find ich.

stifflersmom 12. Mär 2007 16:00

Re: Remoutdesktop
 
Zitat:

Zitat von Catbytes
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.

Ich danke Dir für diesen wunderbaren Tip.

Nach dieser Methode kann man sogar ein MsRdpClient1.Disconnect absetzen.

SaFu 12. Mär 2007 17:02

Re: Remotedesktop
 
Kann man den Remoutedesktop wenn, er gestartet ist nicht einfach über denn Taskmanager abbrechen.

BBG 12. Mär 2007 17:23

Re: Remotedesktop
 
Gibt's da nicht auch die entsprechenden APIs für?

shmia 12. Mär 2007 17:39

Re: Remoutdesktop
 
Zitat:

Zitat von fuknersascha
Kennt Vielleicht jemand die anwendung und den Parameter????

Anstatt die Anwendung anzustarten kann/sollte man die Parameter-Datei (*.RDP) mit CreateProccess rennen lassen.
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.

turboPASCAL 12. Mär 2007 18:21

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:

SirThornberry 12. Mär 2007 20:52

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.

SaFu 13. Mär 2007 08:00

Re: Remotedesktop
 
Oder kann man den Prozess der Remoteverbindung in dem Taskmanager beenden?

SaFu 13. Mär 2007 08:05

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.

Klaus01 13. Mär 2007 08:51

Re: Remotedesktop
 
Zitat:

Zitat von fuknersascha
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.

Guten Morgen,

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

SaFu 13. Mär 2007 09:12

Re: Remotedesktop
 
Das Programm auf PC2 wird ja nicht beendet sondern es wird auf das Anmelde Fenster zurück gesetzt

Delphi-Quellcode:
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;
hier müsste jetzt noch was rein um die Remoteverbindung zu beenden.

Phoenix 13. Mär 2007 11:55

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.

SaFu 13. Mär 2007 14:37

Re: Remotedesktop
 
Zitat:

Zitat von Phoenix
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.

Eigentlich einfach die Verbindung Trennen so das Ich an PC1 von dem aus die Verbindung erstellt wurde weiter Arbeiten Kann

sh17 13. Mär 2007 14:49

Re: Remotedesktop
 
Zitat:

Zitat von fuknersascha
Eigentlich einfach die Verbindung Trennen so das Ich an PC1 von dem aus die Verbindung erstellt wurde weiter Arbeiten Kann

Das geht auch, indem Du das RemoteDesktop-Fenster beseite schiebst. ;-)

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).

SaFu 14. Mär 2007 10:39

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

sh17 14. Mär 2007 10:49

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

SaFu 14. Mär 2007 10:50

Re: Remotedesktop
 
Richtig in meinem Proramm auf PC2 Soll über einen Button in meinem Programm die Remoteverbindung getrennt werden.

sh17 14. Mär 2007 11:03

Re: Remotedesktop
 
:thumb: na dann, WinAPI-funktion gesucht und frisch ans Werk

http://www.delphipraxis.net/internal_redirect.php?t=56

SaFu 14. Mär 2007 15:43

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;

Remko 14. Mär 2007 16:49

Re: Remotedesktop
 
Yes, if you can Disconnect or Logoff a session if you know (or obtain) the SessionID.
See MSDN-Library durchsuchenWTSDisconnectSession and MSDN-Library durchsuchenWTSLogoffSession. Delphi translations are in JwaWtsApi32 from the Jedi Apilib

Edit: sorry I didn't notice that this was a multipage thread, I was replying to:
Zitat:

Gibt's da nicht auch die entsprechenden APIs für?
from page 1

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.

SaFu 15. Mär 2007 09:27

Re: Remotedesktop
 
Hi hat keiner mal einen brauchbaren Tipp mit dem ich mal was anfangen kann???

Bitte :freak:

Remko 15. Mär 2007 09:30

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?

SaFu 15. Mär 2007 09:31

Re: Remotedesktop
 
Thats right!!!

Catbytes 15. Mär 2007 09:58

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...

Remko 15. Mär 2007 10:15

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;

SaFu 15. Mär 2007 10:16

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.

SaFu 15. Mär 2007 10:18

Re: Remotedesktop
 
Zitat:

Zitat von Catbytes
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 -&gt; RDP" zu finden (Doppelklick). Auch hier gibt es den Reiter "Umgebung".

Auf jeden Fall wird das erreicht, was Du willst: TS wird gestartet -&gt; Dein Programm läuft -&gt; Dein Programm wird beendet -&gt; TS wird korrekt beendet.

Alles andere wäre murks...


Zitat:

Zitat von fuknersascha
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.

Sorry das war die Antwort darauf

SaFu 15. Mär 2007 18:30

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:

Catbytes 15. Mär 2007 19:20

Re: Remotedesktop
 
Zitat:

Zitat von fuknersascha
Wäre net wenn ihr vielleicht ne lösung für mein Problem hätte würde euch nie wieder belästigen :pale: :wink:

Du belästigst niemand hier. Dafür ist ja so ein Forum da.

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...

Remko 15. Mär 2007 19:49

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.
Seite 1 von 2  1 2      

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