用C++Builder开发自己的RDP客户端

用C++Builder开发自己的RDP客户端

   关键字:  C++Builder bcb Rdp客户端 远程桌面连接 连接到控制台

 

 

   大家都知道用微软提供的远程桌面工具连接到远程桌面,但是可不可以在自己写的程序中嵌入远程桌面呢?当然可以。下面将一步一步的教你如何使用mstscax控件开发自己的远程桌面客户端。 我用的是C++builder6.0,如果你用的其它的开发工具,方法应该是类似的。

一、打开C++builder6.0,选择Component 菜单下的Import ActiveX Control…。然后按下图所示选择Microsoft Terminal Service Control Type Library[Version 1.0]。然后点击install…

 

然后在弹出的窗口中点击Compile,不过在编译的过程中会出错,解决的方法是把OlePrecedure 改为OleProcedure,再次编译。编译成功之后点击install。好啦~到现在为止环境就搭建好了。

 

二、重新打开C++builder,新建一个Windows项目。在ActiveX面板中找到

TMsRdpClient2NotSafeForScripting控件,把他添加到界面中去。同时再增加几个辅助控件,效果如下:

 

三、现在编写代码

//连接

 

void __fastcall TForm1::btnConnectClick(TObject *Sender)

{

    RdpClient->Server=WideString(edtIP->Text);

    RdpClient->UserName=WideString(edtUsername->Text);

    RdpClient->AdvancedSettings2->ClearTextPassword=WideString(edtPwd->Text);

    RdpClient->AdvancedSettings2->set_RDPPort(edtPort->Text.ToInt());

    RdpClient->Connect();

    Timer1->Enabled=true;

    btnConnect->Enabled=false;

    btnDisconnect->Enabled=true;

}

 

//---------------------------------------------------------------------------

//断开

void __fastcall TForm1::btnDisconnectClick(TObject *Sender)

{

     RdpClient->Disconnect();
    Timer1->Enabled=false;
    btnConnect->Enabled=true;
    btnDisconnect->Enabled=false;

}

//Timer1的Timer事件

由于mstscax控件在BCB上应用存在一个Bug,就是RdpClient不能自动获得焦点,表现为连上之后如果RdpClient失去焦点,再次获得焦点时RdpClient将没有响应,和死机效果一样(不一定每次都出现)。这时我们需要手动设置焦点。

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
 static bool moveInRdp=true;

    if(!RdpClient->Connected)
    {
        btnConnect->Enabled=true;
        btnDisconnect->Enabled=false;
        Timer1->Enabled=false;
    }

    TPoint pos = RdpClient->ScreenToClient(Mouse->CursorPos);
    if(pos.x>0 && pos.x<RdpClient->Width && pos.y>0 && pos.y < RdpClient->Height)
    {
        if(moveInRdp && RdpClient->Connected)
        {

            moveInRdp = false;
           edtIP->SetFocus();
           RdpClient->SetFocus();
        }
    }
    else
    {
        moveInRdp=true;
    }
}

 

四、好啦,来看一下效果

 

好了,到现在为止开发自己的远程桌面连接客户端已经完成了。

五、连接到控制台

    可能大家会注意到界面上多了一个连接到控制台的复选按钮“连接到控制台”,这个是什么意思呢?首先要明白什么叫连接到控制台。假如有两个用户用同一个用户名进行登录时,服务器实际上开的是两个会话,两边会话互不影响(只针对显示画面),但如果你要限制只能使用一个会话时就要使用连接到控制台(不止这一点功能,其它的希望自己去测试)。现在说明如何在程序中实现这项功能。在连接按钮的单击事件中添加如下代码:

windows xp sp2:

    if (chkConnectToConsole->Checked)
    {
     RdpClient->AdvancedSettings2->ConnectToServerConsole=VARIANT_TRUE;        
    }
    else
    {
     RdpClient->AdvancedSettings2->ConnectToServerConsole=VARIANT_FALSE;
    }
windows xp Sp3 及更高windwos版本

    注意:这里RdpClient是TMsRdpClient6NotSafeForScripting类的对象

    if (chkConnectToConsole->Checked)
    {
        RdpClient->AdvancedSettings7->ConnectToAdministerServer = VARIANT_TRUE;
    }
    else
    {
        RdpClient->AdvancedSettings7->ConnectToAdministerServer = VARIANT_FALSE;
    }

如果要兼容Sp2与Sp3的windows xp,可以先用TMsRdpClient2NotSafeForScripting对象:

    if(RdpClient->AdvancedSettings2->get_ConnectToServerConsole()!=-1) //证明已经升级为SP3

   {

        使用TMsRdpClient6NotSafeForScripting类

   }

   else

   {

        使用TMsRdpClient2NotSafeForScripting类

   }

    好了,完了。如果大家在过程中有什么问题希望与我取得联系。

    qq:155377810  mail:alxter@foxmail.com

    原创作品,转贴请注明出处!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值