有一些工具可用于管理多个终端 (mstsc) 会话。
我将如何在 WPF 中实现类似的目标?
您应该使用WindowsFormsHost
element 来承载 RDP 的 ActiveX 控件。
有一个简短的示例如何将 Windows Media Player 集成到 WPF 应用程序中。RDP 控件的托管是类似的。
这些工具很可能使用旨在托管在网页中的远程桌面 ActiveX 控件,但由于它是一个 ActiveX 控件,因此您也应该能够自己托管它。
如果不出意外,您可以在 WPF 应用程序中嵌入 Web 浏览器控件,然后将 ActiveX 控件嵌入其中。
请参阅以下链接:
您可以从官方 MS 站点的 MS RDCMan 获得它。如何从“参考”中的 COM 选项卡添加它 - 是个好问题... 2. 添加到 XAML WindowsFormsHost:
<UserControl x:Class="VMViewer"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="231" d:DesignWidth="274" Loaded="UserControl_Loaded">
<Border BorderThickness="1" BorderBrush="CornflowerBlue">
<Grid >
<Grid.RowDefinitions>
<RowDefinition Height="22"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Button Grid.Row="0" x:Name="connectBtn" Content="Connect" Click="Button_Click" DockPanel.Dock="Top" HorizontalAlignment="Stretch" />
<WindowsFormsHost Grid.Row="1" Margin="0,0,0,0" x:Name="wfHost" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
</Grid>
</Border>
创建新的 rdp 客户端类:
公共类 RdpControl:AxMSTSCLib.AxMsRdpClient9NotSafeForScripting { public RdpControl():base() { }
protected override void WndProc(ref System.Windows.Forms.Message m)
{
// Fix for the missing focus issue on the rdp client component
if (m.Msg == 0x0021) // WM_MOUSEACTIVATE
{
if (!this.ContainsFocus)
{
this.Focus();
}
}
base.WndProc(ref m);
}}
在您的 UserControl 的后面代码中:
私有无效 InitData() { _rdp = new RdpControl(); ((System.ComponentModel.ISupportInitialize)(_rdp)).BeginInit(); _rdp.Name = "rdp"; _rdp.Enabled = true; wfHost.Child = _rdp; ((System.ComponentModel.ISupportInitialize)(_rdp)).EndInit(); }
private void Connect()
{
_rdp.Server = CurrentVM.Name;
_rdp.UserName = CurrentVM.Login;
_rdp.AdvancedSettings9.ClearTextPassword = CurrentVM.Password;
_rdp.ColorDepth = 24;
_rdp.AdvancedSettings9.SmartSizing = true;
_rdp.AdvancedSettings9.AuthenticationLevel = 2;
_rdp.AdvancedSettings9.EnableCredSspSupport = true;
_rdp.Width = Convert.ToInt32(this.ActualWidth);
_rdp.Height = Convert.ToInt32(this.ActualHeight);
_rdp.DesktopWidth = Convert.ToInt32(this.ActualWidth);
_rdp.DesktopHeight = Convert.ToInt32(this.ActualHeight);
try
{
_rdp.Connect();
}
catch
{
}
}
使用此处理程序添加到 UserControl 按钮:
private void Button_Click(object sender, RoutedEventArgs e)
{
InitData();
Connect();
}
希望能帮助到你。