
A mellékelt példaprogram megnyitása előtt válassza a Delphi-ben a Component - Import ActiveX Control menüpontot, majd a megjelenő listából keresse elő a Microsoft Terminal Services Active Client 1.0 Type Library elemet és telepítse az ebben lévő komponenseket a Delphi alá.
Szoftverfeltételek
A Terminal Service-hez kiszolgálói oldalon minimálisan a Windows 2000, esetleg a Windows NT 4 Terminal Service Edition változat kell. Kiszolgálói és kliens oldalon egyaránt használható a Windows XP Professional. Kliens oldalon külön telepítés után bármilyen régebbi Windows is üzembe állítható, lehet az akár Windows 95 is, vagy Win3.1, de akár még a DOS is.
Példaprogram
Ha tehát installáltuk a Delphi-be a Terminal Services Active Client 1.0 Type Library-t, akkor kapunk két új komponenst a Dlephi palettáin. Ezt persze akkor tudjuk megtenni, ha a szükséges kliens oldali szoftverfeltételek már adottak. Például Windows XP Professional esetén nincs szükségünk semmilyen előkészületre, ott már „gyárilag” adott minden e feladat elvégzéséhez.
A két új komponens közül mi most a TMsRdpClient komponenst fogjuk használni. Ebből tegyünk egyet a Form-ra. E komponens területén, mint egy ablakban jelenik meg a szerverünk képernyője.
A csatlakozáshoz csak meg kell adni a Server property-ben a szerver nevét, vagy IP címét. A UserName property-be kerül a felhasználói nevünk. A jelszavunkat majd interaktívan kell megadni a csatlakozás folyamán. Végül a Connect függvény hívásával kezdeményezhetjük a kapcsolat felvételt. Ekkor a jelszó bekérése után elérjük a szerver, melynek képernyője megjelenik a TMsRdpClient komponens területén.
MsRdpClient1.Server:=Edit1.Text;
MsRdpClient1.UserName:=Edit2.Text;
MsRdpClient1.Connect;
A trükk
Lehetőségünk van arra is, hogy olyan kapcsolatot hozzunk létre, ahol nem a teljes szerver érhető el, hanem csak egy program, mely természetesen a kiszolgálón fut. Ekkor a bejelentkezés után rögtön ez a program indul, majd amikor bezárjuk ezt a programot, akkor a terminál kapcsolat is automatikusan bontásra kerül.
Például csak egy parancssorra van szükségünk a szerveren, akkor az így tudjuk elindítani:
MsRdpClient1.Server:=Edit1.Text;
MsRdpClient1.UserName:=Edit2.Text;
if boolean(MsRdpClient1.SecuredSettingsEnabled) then begin
MsRdpClient1.SecuredSettings.StartProgram:='cmd.exe';
end;
MsRdpClient1.Connect;
Kapcsolat bontása, megszakadása
A kapcsolatot úgy bonthatjuk, hogy a szerveren kijelentkezünk mint felhasználó, ekkor a terminál ablak zárása automatikusan megtörténik és kapunk egy OnDisconnected eseményt. Ebben az eseményben a DiscReason paraméterben kapunk egy kódszámot, melyből megtudható, a kapcsolat lezárásnak oka, esetleges hibakódja.
| Reason kód |
Leírás |
| 1 |
Local Disconnection (not an error) |
| 2 |
Remote Disconnection by user (not an error) |
| 3 |
Remote Disconnection by server (not an error) |
| 260 |
DNS Lookup Failed |
| 262 |
Out of memory condition |
| 264 |
Connection Timed Out |
| 516 |
WinSock socket connect failed |
| 518 |
Out of memory condition |
| 520 |
Host Not Found error (GetHostByName failed). |
| 772 |
WinSock send call failed |
| 774 |
Out of memory condition |
| 776 |
Invalid IP address specified |
| 1028 |
WinSock recv call failed |
| 1030 |
Invalid Security Data |
| 1032 |
Internal error (code 1032) |
| 1286 |
Invalid Encryption Method |
| 1288 |
DNS Lookup failed |
| 1540 |
GetHostByName call failed |
| 1542 |
Invalid server security data |
| 1544 |
Internal Error (timer error) |
| 1796 |
Timeout occurred |
| 1798 |
Failed to unpack server certificate |
| 2052 |
Bad IP address specified |
| 2054 |
Internal Security Error |
| 2308 |
Socket closed |
| 2310 |
Internal Security Error |
| 2566 |
Internal Security Error |
| 2822 |
Encryption error |
| 3078 |
Decryption error |