我用MSTSCLIB写了一个简单的rdp连接工具。这对我很有用。
//hide form border
this.FormBorderStyle = FormBorderStyle.None;
//server and username
rdp.Server = "*********";
rdp.UserName = "*********";
//password
IMsTscNonScriptable secured = (IMsTscNonScriptable)rdp.GetOcx();
secured.ClearTextPassword = "***********";
//resolution
rdp.DesktopHeight = 1080;
rdp.DesktopWidth = 1920;
//rdp options
rdp.AdvancedSettings8.AuthenticationLevel = 2;
//connect
rdp.Connect();
有时用户已经登录到远程工作站并收到Windows对话框"指定的Windows帐户已经登录。..."。
我需要一个解决方案来自动确认Windows对话框。所以第一个想法是将应用程序设置在前台:
//Set window as foreground window
Process processes = Process.GetCurrentProcess();
//MessageBox.Show(processes.ProcessName);
IntPtr windowhandle = processes.MainWindowHandle;
SetForegroundWindow(windowhandle);
第二步是使用spy ++获取windows Handle ID并使用FindWindow()使用SendMessage()来关闭MessageBox句柄。
//Get the MessageBox handle
IntPtr handle = FindWindow("?????????", null);
MessageBox.Show("Hanlde1: " + handle.ToString() + "\n");
//Get the Text window handle
IntPtr txtHandle = FindWindowEx(handle, IntPtr.Zero, "Static", null);
MessageBox.Show("\ttext handle: " + txtHandle.ToString() + "\n");
int len = GetWindowTextLength(txtHandle);
StringBuilder sb = new StringBuilder();
//Get the text
GetWindowText(txtHandle, sb, len + 1);
MessageBox.Show("\ttext: " + sb.ToString() + "\n\n");
//close the messagebox
SendMessage(new HandleRef(null, handle), WM_CLOSE, IntPtr.Zero, IntPtr.Zero);
所以我的问题是,我无法从spy ++获取RDP连接中Dialog的Handle ID。它仅向我显示父窗口中的ID,而不是Windows对话框中的ID。
所以我的第一个问题是:这是处理这个对话窗口的正确方法吗? 第二个问题:如何在RDP会话中收到对话窗口的正确句柄ID。
非常感谢。
哈根