Я использую Удаленный рабочий стол ActiveX control , предоставленный Microsoft, для разработки RDP-клиента для сценария удаленного приложения ios с C#. При использовании его для открытия удаленного приложения и локального переключения на метод ввода Microsoft Pinyin, удаленный рабочий стол автоматически переключается на тот же метод ввода. Когда я ввожу китайский язык, локальные и удаленные методы ввода будут реагировать на события клавиатуры. И все они показывают кандидатскую панель инструментов слова. Если я использую китайские методы ввода, отличные от Microsoft Pinyin, локально, этого не произойдет. Позже я попытался использовать команду msts c Windows, чтобы открыть то же самое удаленное приложение. Метод ввода Microsoft Pinyin не отвечает локально и удаленно. Существуют ли какие-либо специальные свойства в ActiveX для удаленного рабочего стола, которые необходимо установить?
Форма моего контейнера:
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AxContainer));
this.rdp = new AxMSTSCLib.AxMsRdpClient9NotSafeForScripting();
((System.ComponentModel.ISupportInitialize)(this.rdp)).BeginInit();
this.SuspendLayout();
//
// rdp
//
this.rdp.Dock = System.Windows.Forms.DockStyle.Fill;
this.rdp.Enabled = true;
this.rdp.Location = new System.Drawing.Point(0, 0);
this.rdp.Name = "rdp";
this.rdp.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("rdp.OcxState")));
this.rdp.Size = new System.Drawing.Size(800, 450);
this.rdp.TabIndex = 0;
//
// AxContainer
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.rdp);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "AxContainer";
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "remoteappclient";
this.TopMost = true;
this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.AxContainer_FormClosing);
this.Load += new System.EventHandler(this.AxContainer_Load);
((System.ComponentModel.ISupportInitialize)(this.rdp)).EndInit();
this.ResumeLayout(false);
При подключении к удаленному рабочему столу:
rdp.AdvancedSettings9.EnableAutoReconnect = true;
rdp.RemoteProgram2.RemoteProgramMode = true;
rdp.MsRdpClientShell.PublicMode = true;
rdp.FullScreen = true;
//rdp.TransportSettings4.GatewayDomain = _msg.Credential.Domain;
rdp.TransportSettings4.GatewayUsername = msg.Credential.Domain + "\\" + _msg.Credential.Username;
rdp.TransportSettings4.GatewayPassword = _msg.Credential.ClearPassword;
//rdp.TransportSettings4.GatewayHostname = _rdpFile.GatewayHostname.Split(':')[0];
rdp.TransportSettings4.GatewayHostname = _rdpFile.GatewayHostname;
rdp.TransportSettings4.GatewayUsageMethod = _rdpFile.GatewayUsageMethod;
rdp.TransportSettings4.GatewayProfileUsageMethod = _rdpFile.GatewayProfileUsageMethod;
rdp.TransportSettings4.GatewayCredsSource = _rdpFile.GatewayCredentialsSource;
rdp.Server = _rdpFile.FullAddress.Split(':')[0];
rdp.AdvancedSettings9.RDPPort = _rdpFile.ServerPort;
rdp.Domain = _msg.Credential.Domain;
rdp.UserName = _msg.Credential.Username;
rdp.AdvancedSettings9.ClearTextPassword = _msg.Credential.ClearPassword;
rdp.DesktopWidth = SystemInformation.VirtualScreen.Width;
rdp.DesktopHeight = SystemInformation.VirtualScreen.Height;
rdp.AdvancedSettings9.HotKeyCtrlAltDel = 0;
rdp.AdvancedSettings9.HotKeyAltEsc = 0;
rdp.AdvancedSettings9.HotKeyAltShiftTab = 0;
rdp.AdvancedSettings9.HotKeyAltSpace = 0;
rdp.AdvancedSettings9.HotKeyAltTab = 0;
rdp.AdvancedSettings9.HotKeyFocusReleaseLeft = 0;
rdp.AdvancedSettings9.HotKeyFocusReleaseRight = 0;
rdp.AdvancedSettings9.HotKeyFullScreen = 0;
rdp.AdvancedSettings9.SmartSizing = true;
//0: If Server authentication(RDSH certificate) fails, connect without warning
rdp.AdvancedSettings9.AuthenticationLevel = 0;
rdp.AdvancedSettings9.EnableCredSspSupport = true;
rdp.AdvancedSettings9.keepAliveInterval = 10000;
rdp.AdvancedSettings9.minInputSendInterval = 50;
//rdp.AdvancedSettings9.MinutesToIdleTimeout =
rdp.AdvancedSettings9.PerformanceFlags = TS_PERF_DISABLE_WALLPAPER|TS_PERF_DISABLE_THEMING|TS_PERF_DISABLE_MENUANIMATIONS|TS_PERF_DISABLE_CURSOR_SHADOW;
rdp.AdvancedSettings9.RedirectSmartCards = true;
rdp.AdvancedSettings9.RedirectDevices = false;
rdp.AdvancedSettings9.RedirectDirectX = false;
rdp.AdvancedSettings9.RedirectDrives = false;
rdp.Connect();