利用mstscax.dll开发远程登录客户端

最近项目要用到远程登录客户端,类似于windows自带的mstsc.exe的功能,自己在网上找了好久,说是可以在mstscax.dll基础上进行开发,但是找不到比较好的资料,经过自己的摸索,终于成功了。

  • 第一步,mstscax.dl是一个ActiveX控件,需要进行注册,在运行中输入“regsvr32  C:\WINDOWS\system32\mstscax.dll”。
  • 第二步,新建对话框程序,在对话框资源上单击右键,选择【Insert ActiveX Control...】菜单,然后在弹出的界面中选择“Microsoft RDP Client Contorl”。
  • 第三步,设置控件的关联变量,可利用向导完成。
  • 第四步,打开类向导,选择右上角【添加类】按钮,在弹出的下拉列表中选择【类型库中的MFC类】,然后在类库列表中选择Microsoft Terminal Service Client Control Type Library,然后在左侧接口列表中选择IMsRdpClientAdvanceSettings6,添加到右侧生成类列表中。
  • 第五步,切换到类视图,打开CMsRdpClientAdvancedSettings6类头文件,注释掉:#import "C://Windows//system32//mstscax.dll" no_namespace 这句代码。
  • 第六步,在对话框的确定按钮响应函数中,添加以下代码

void CRDPTestDlg::OnBnClickedOk()
{
	// TODO: Add your control notification handler code here
	//OnOK();
	CMsRdpClientAdvancedSettings6 m_MsRdpClientAdvancedSettings(m_rdp.get_AdvancedSettings()); 	
	m_rdp.put_Server(_T("192.168.0.1"));//远程目标主机的IP
	m_rdp.put_UserName(_T("test"));	//登陆用户名
	m_rdp.put_DesktopHeight(800);
	m_rdp.put_DesktopWidth(1200);
	m_rdp.put_ColorDepth(32);
	m_MsRdpClientAdvancedSettings.put_Compress(1);
	m_MsRdpClientAdvancedSettings.put_BitmapPeristence(1);
	m_MsRdpClientAdvancedSettings.put_ClearTextPassword(_T("BW11"));//登陆密码
	m_MsRdpClientAdvancedSettings.put_singleConnectionTimeout(20);//连接时延
	m_rdp.put_ConnectingText(_T("请稍后..."));//连接时显示在界面的文字
	m_rdp.Connect();
	GetDlgItem(IDOK)->EnableWindow(FALSE);	
}

  • 第七步,响应控件的OnDisConnected消息,函数如下
void CRDPTestDlg::OnDisconnectedMstscax2(long discReason)
{
	// TODO: Add your message handler code here
	switch (discReason)
	{
	case 0x3:
		AfxMessageBox(_T("该用户在别处登录,您已经被强制下线,若有疑问,请联系管理员"));
		break;
	default:
		AfxMessageBox(_T("远程连接失败,请重试或联系管理员"));
		break;
	}
	
}


完成工程源码见:http://download.csdn.net/detail/chaozi2008/8636587

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
下面是一个使用 `ctypes` 模块调用 Windows 10 远程桌面的示例代码: ```python import ctypes # 加载 Windows API 库 mstscax = ctypes.WinDLL('mstscax.dll') kernel32 = ctypes.WinDLL('kernel32.dll') # 定义 Windows API 函数的参数类型 DWORD = ctypes.c_ulong LPWSTR = ctypes.c_wchar_p HWND = ctypes.c_void_p # 获取当前窗口句柄 hWnd = kernel32.GetConsoleWindow() # 创建 MSTSCax 控件 mstsc = ctypes.windll.ole32.CoCreateInstance( ctypes.byref(ctypes.wintypes.GUID("{905E63B6-C1BF-494E-B29C-65B732D3D21A}")), None, 1, ctypes.byref(ctypes.wintypes.GUID("{0F6B957E-509E-11D1-A7CC-0000F87571E3}")), ctypes.byref(mstscax), ) # 设置 MSTSCax 控件的属性 mstscax.put_Server(LPWSTR("example.com")) mstscax.put_UserName(LPWSTR("username")) mstscax.put_Domain(LPWSTR("domain")) mstscax.put_Password(LPWSTR("password")) # 连接远程桌面 mstscax.Connect() # 获取 MSTSCax 控件的窗口句柄 hWndMstsc = mstscax.get_HWND() # 将 MSTSCax 控件嵌入到当前窗口 mstscax.SetParent(hWnd, 0) mstscax.MoveWindow(0, 0, 800, 600, True) mstscax.put_Visible(True) # 消息循环 msg = ctypes.wintypes.MSG() while ctypes.windll.user32.GetMessageW(ctypes.byref(msg), None, 0, 0) > 0: ctypes.windll.user32.TranslateMessage(ctypes.byref(msg)) ctypes.windll.user32.DispatchMessageW(ctypes.byref(msg)) ``` 在上面的代码中,我们使用 `ctypes.WinDLL` 函数来加载 `mstscax.dll` 和 `kernel32.dll` 库。然后,我们使用 `ctypes.windll.ole32.CoCreateInstance` 函数创建了一个 MSTSCax 控件,并设置了它的属性。最后,我们将 MSTSCax 控件嵌入到当前窗口,并启动了一个消息循环来处理窗口消息。 请注意,使用 `ctypes` 模块调用 Windows API 可能会比使用 pywin32 模块更复杂,并且需要手动定义 Windows API 函数的参数类型。但是,它可以在 Python 3.10 中正常工作,并且可以访问 Windows API 的所有功能。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值