- Вы должны добавить в проект две библиотеки:
AxInterop.MSTSCLib.dll,
Interop.MSTSCLib.dll
Вы можете получить его из MS RDCMan с официального сайта MS. Как добавить его из вкладки 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 ()
: база()
{
}
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:
private void InitData ()
{
_rdp = новый 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();
}
Надеюсь, это поможет.