处理MSTSCLIB Windows对话框C#

时间:2018-04-03 14:55:31

标签: c# rdp

我用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。

非常感谢。

哈根

0 个答案:

没有答案