问题描述
我正在一个项目中在后台运行多个MSTSCLib RDP连接。建立连接后,我需要保存每个RDP连接的屏幕截图。我想将这些图像收集到一个文件夹中而不向用户显示。我有下面的代码,但是我只能得到一张黑色的图片。我该如何解决这个问题?
public class RemoteDesktopApi
{
private Thread _thread;
public void connect(string _Ip,Int32 _Port,Int32 _witdh,Int32 _height,Int32 _timeout,string _User,string _Pass)
{
try
{
var rdpForm = new System.Windows.Forms.Form();
var rdp = new AxmsTSCLib.AxmsRdpClient6NotSafeForScripting();
var tcs = new taskcompletionsource<TaskScheduler>();
rdp.Height = _height;
rdp.Height = _height;
rdp.Width = _witdh;
rdpForm.Width = _witdh;
rdpForm.Height = _height;
rdpForm.Controls.Add(rdp);
rdpForm.ShowInTaskbar = false;
rdpForm.Show();
rdpForm.Text = Convert.ToString(rdpForm.Handle);
rdp.AdvancedSettings7.EnableWindowsKey = 1;
rdp.AdvancedSettings7.disableCtrlAltDel = 1;
rdp.AdvancedSettings7.allowBackgroundInput = 1;
rdp.AdvancedSettings7.AcceleratorPassthrough = 1;
rdp.AdvancedSettings7.BitmapPeristence = 1;
rdp.AdvancedSettings7.Compress = 1;
rdp.AdvancedSettings7.DoubleClickDetect = 1;
rdp.AdvancedSettings7.PerformanceFlags = 0x10;
// rdpForm.ControlBox = false;
//rdpForm.WindowState = FormWindowState.Minimized;
rdpForm.Left = -2000;
//rdpForm.MinimizeBox
MessageBox.Show(Convert.ToString(rdpForm.Handle));
rdp.Server = _Ip;
rdp.UserName =_User;
rdp.AdvancedSettings7.ClearTextPassword = _Pass;
rdp.Connect();
_thread = new Thread(startArg =>
{
while (rdp.Connected.ToString() == "2")
{
Thread.Sleep(1000);
}
Thread.Sleep(5000);
Control ctl = rdp;
Control originalParent = ctl.Parent;
int oldLeft = ctl.Left;
ctl.Left = 22222; // way outside
ctl.Parent = rdpForm;
System.Drawing.Imaging.ImageFormat fmt = System.Drawing.Imaging.ImageFormat.Jpeg;
if ("test.png".ToLower().EndsWith(".png"))
fmt = System.Drawing.Imaging.ImageFormat.Png;
using (Bitmap bmp = new Bitmap(ctl.ClientSize.Width,ctl.ClientSize.Height))
{
ctl.DrawToBitmap(bmp,ctl.ClientRectangle);
bmp.Save("test.png",fmt);
}
ctl.Parent = originalParent;
ctl.Left = oldLeft;
rdpForm.Parent = originalParent;
rdpForm.Left = oldLeft;
rdp.disconnect();
rdpForm.Close();
});
_thread.SetApartmentState(ApartmentState.STA);
_thread.IsBackground = true;
_thread.Start();
}
catch
{
}
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)