#调用mstscax.dll编写远程桌面 RDP client
2012-08-08 09:46:56| 分类: C#.NET |字号 订阅
步骤一:添加COM引用mstscax.dll,该文件位于c:\windows\system32目录下
步骤二:添加控件到选项卡上。
在窗体设计的工具箱上点击右键,在弹出的菜单中单击“选择项”
在COM选项卡下选择位于c:\windows\system32下的mstscax.dll文件,标题为Microsoft RDP client control
在设计模式下的工具箱中找到Microsoft RDP Client Control控件,并拖入到窗体上,命名为rdp。
连接代码如下
private void btn_K8conn3389_Click(object sender, EventArgs e)
{
rdp.Server = "192.168.1.111";
rdp.AdvancedSettings2.RDPPort = 3389;
rdp.UserName = "k8admin";
rdp.AdvancedSettings2.ClearTextPassword = "k8team";
//在rdp.AdvancedSettings2下还有很多高级设置,自行摸索吧,
rdp.Connect();
}
一是自己寫,思想基本上就是,在被控PC端抓圖,傳到控制程式,然後將控制程式中的指令傳到被控端,如果這樣涉及的知識比較多,有網路傳輸、WIN32API(查下來發現,滑鼠鍵盤的操作,win32API是比較可行的)、WINFORM中的一系列的東西,估計用時會很長,但能學到不少東西; 二就是利用現有的東西,特別是WINDOWS裏的終端功能的介面,基於Remote Desktop Protocol的東西,轉來轉去,發現最方便的是 ActiveX component mstscax.dll的使用,這個直接就可以在winform中生成一個對象。
考慮到工作量和時間,選第二個思路比較方便。
在網上找了很多資料,發現國內用這個的不多,可能是不值得一提吧。 最後終於找到了。現在就講講方法:
這裏主要用到的就是Activex component mstscax.dll,網上看到好多說在visual studio.net 2003中的工具箱中可以直接將它添加,我試了Win2k advance server和xp下都不能成功,報“不是com伺服器”,好像這條路行不通,幸好找到一個一個方法,繞過了這個,用的是Windows Forms ActiveX
Control Importer (Aximp.exe),具體操作就把找到的帖子粘帖出來。具體的使用,還在摸索。
1. md c:\temp 2. cd c:\temp
3. %<SDK bin directory>%\aximp.exe %windir%\system32\mstscax.dll This will generate MSTSCLib.dll and AxMSTSCLib.dll.
Make sure Interop.MSTSCLib.dll and AxInterop.MSTSCLib.dll have been deleted in the obj and bin\Debug directories.
4. Copy the generated files (without renaming) - MSTSCLib.dll and AxMSTSCLib.dll into the project's obj directory.
5. In the project's references, add MSTSCLib.dll and AxMSTSCLib.dll from the obj directories.
6. Now, instead of drag-drop'ing the control from the toolbox, write code to add the control:
Goto Form.cs code view
Declare: private AxMSTSCLib.AxMsTscAx axMsTscAx1; In InitializeComponent:
this.axMsTscAx1 = new AxMSTSCLib.AxMsTscAx();
((System.ComponentModel.ISuppo rtInitialize)(this.axMsTscAx1) ).BeginInit();
this.axMsTscAx1.Enabled = true;
this.axMsTscAx1.Location = new System.Drawing.Point(58, 17); this.axMsTscAx1.Name = "axMsTscAx1" this.axMsTscAx1.OcxState = ((System.Windows.Forms.AxHost. State)(resources.GetObject("ax MsTscAx1.OcxState")));
this.axMsTscAx1.Size = new System.Drawing.Size(192, 192);
this.axMsTscAx1.TabIndex = 1;
this.Controls.Add(this.axMsTsc Ax1);
((System.ComponentModel.ISuppo rtInitialize)(this.axMsTscAx1) ).EndInit();
===========================================================
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. 運行C++Builder-->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 = WideString("Welcome! ccrun."); // 連接的伺服器地址
MsTscAx1->Server = WideString(edtServer->Text); // 窗口/全屏模式
MsTscAx1->FullScreen = false;
// 文檔標題:打造自己的Windows終端服務客戶端 // 作者:ccrun(老妖) 信箱:info@ccrun.com
// 為防止不負責任的轉載者遺漏作者資訊,故在此插入此信息,請見諒. // 歡迎訪問C++Builder 研究 http://www.ccrun.com
// 畫面色深(通常都是256色)
MsTscAx1->ColorDepth = 16; // 登錄用戶名
MsTscAx1->UserName = WideString(edtUserName->Text); // 斷開連接後顯示的字串
MsTscAx1->DisconnectedText = WideString("886,ccrun."); // 將位圖緩存到磁片
MsTscAx1->AdvancedSettings->BitmapPeristence = 1; // 啟用數據壓縮
MsTscAx1->AdvancedSettings->Compress = 1;
// 連接後運行的Shell程式,當關閉此Shell程式後自動斷開連接
MsTscAx1->SecuredSettings->set_StartProgram(WideString("C:ccrun123.exe")); // 連接
MsTscAx1->Connect(); // 斷開連接
MsTscAx1->Disconnect();
5. 新建一個Project,在Form上拖一個MsTscAx控件,根據上面介紹的屬性和方法,相信你在BCB中建立自己的終端服務客戶端沒問題了。
6. 編譯後的程式發佈時必須在目標機器上存在mstscax.dll檔,並且用Regsvr32註冊以後才能正常運行。
有BUG,意見和建議,歡迎致信到info@ccrun.com共同討論,請勿攜帶附件,帶附件信件一律自動刪除,謝謝