rdp delphi 实现远程桌面
rdp delphi 实现远程桌面
博客分类: other
1.
首先确保你的机器上存在 mstscax.dll ,如果没有这个
文 件,可以从
http://download.microsoft.com/download/whistler/tools/1.0/ wxp/en-us/msrdpcli.exe 下载并安装远程桌面连接软件.或
者使用 WindowXP 中自带的 mstscax.dll ,运行 regsvr32
mstscax.dll 进行注册, ccrun 测试使用的 mstscax.dll 版本
号 是 5.1.2600.0 ,在 Windows2000 Server 中可以编译。
2.
运行 delphi 7-->Components-->Import Active
Control ,在列表中找到下面的 Microsoft Terminal Services Active Client 1.0 Type Library (Version 1.0), 点击 install ,你
可以选择将其安装到现在的包中, 也可以新建一个, 选择 Into new package--> 点击 Browser 将其保存为
D:Program FilesBorlandccrunmstscmstsc.bpk 。在 Description
一栏可 以填: Microsoft Terminal Service Control ,这个名称将出现 在安装完成后的 Package 列表中。点击 OK 以后,稍等片刻, 系统会提示 mstsc.bpl 将被编译并且安装,是否继续,点击 yes 。这时如果一切正常的话, 系统将提示有两个编译错误 (嘿 嘿,我指的是正常情况下 ),难道是 BCB 的 BUG ?提示找不 到
OlePrecedure 的定义。我靠。记忆中有个
OleProcedure , 一个 o ,一个 e ,该不会真的是笔误
吧。 将两处 OlePrecedure 换成 OleProcedure ,再次编译, ok 了,编译成功, 点击 Install 安装。
3. 如果上一个步骤成功的话, 在组件面板的 ActiveX
下将多 出两个控件: MsTscAx 和 MsRdpClient ,我们主要是利用 MsTscAx 控件。
4. MsTscAx 控件的常用属性和方法:
MsTscAx1.DesktopHeight = 600;// 桌面高度
MsTscAx1.DesktopWidth = 800;// 桌面宽度
MsTscAx1.ConnectingText = 'Welcome! ccrun.';// 在连
接前显示的字符串
MsTscAx1.Server = '127.0.0.1';// 连接的服务器地
MsTscAx1.FullScreen = false;
// 窗口 / 全屏模
式
MsTscAx1.ColorDepth = 16;// 256 色 )
画面色深 (通常都是
MsTscAx1.UserName = 'administrator';//
登录用
户名
MsTscAx1.DisconnectedText = '886,ccrun.';// 断 开连
接后显示的字符串
MsTscAx1.AdvancedSettings.BitmapPeristence =
1;// 将位图缓存到磁盘
MsTscAx1.AdvancedSettings.Compress = 1;//
用数据压缩
MsTscAx1.SecuredSettings.set_StartProgram('C:\\ccrun\\1 23.exe');// 连接后运行的 Shell 程序,当关闭此 Shell 程序
后 自动断开连接
MsTscAx1.Connect();// 连接
MsTscAx1.Disconnect();// 断开连接
5.
新建一个 Project ,在 Form 上拖一个 MsTscAx 控
件,根 据上面介绍的属性和方法,相信你在 BCB 中建立自己的终 端服务客户端没问题了。 代码示例:
[delphi] view plaincopy
unit Unit1;
interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, MSTSCLib_TLB, StdCtrls;
type
TForm1 = class(TForm)
btn1: TButton;
msrdpclnt: TMsTscAx;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm} procedure TForm1.btn1Click(Sender: TObject);
var
proj: ImsRdpclientAdvancedSettings; // 定义密码用
p1: IMsRdpClientAdvancedSettingsDisp; //
自定义端
口 用
begin
msrdpclnt.Server := '127.0.0.1';
if
msrdpclnt.AdvancedSettings.QueryInterface(IMsRdpClient AdvancedSettingsDisp, p1) = S_OK then
begin
p1.RDPPort := 33;
end;
msrdpclnt.UserName := 'administrator';
if
msrdpclnt.AdvancedSettings.QueryInterface(ImsRdpclient AdvancedSettings,proj) = S_OK then
begin
proj.Set_ClearTextPassword('123');
end;
msrdpclnt.Connect;
end; end.
示例 2 :
[delphi] view plaincopy
unit uRDP;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, MSTSCLib_TLB, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
MsRdpClient: TMsRdpClient;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
MsRdpClient := TMsRdpClient.Create(Self);
with MsRdpClient do
begin
Name := 'MsRdpClient';
Parent := Self;
Left := 0;
Top := 0;
Width := 800;
Height := 600; TabOrder := 0;
ControlData :=
{0003000008000200000000000B000000030000000000}; // Dies kennt er nicht
end;
Edit1.BringToFront;
Button1.BringToFront;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
MsRdpClient.Server := Edit1.Text; MsRdpClient.Domain :=
GetEnvironmentVariable('USERDNSDOMAIN');
MsRdpClient.UserName := '<username>';
MsRdpClient.AdvancedSettings2.ClearTextPassword := '<password>';
MsRdpClient.Connect;
end;
end. 6. 编译后的程序发布时必须在目标机器上存在 mstscax.dll 文件,并且用 Regsvr32 注册以后才能正常
运行
分享到: