Обработка диалогового окна MSTSCLIB с помощью C#
Привет ребята,
Я написал простое приложение, протокол RDP с помощью C#, я через MSTSCLIB. Это прекрасно работает для меня.
//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);
И второй шаг-получить идентификатор дескриптора windows с помощью spy++ и использовать 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. Он показывает мне только идентификатор из родительского окна, а не из диалогового окна Windows.
Итак, мой первый вопрос: это правильный способ обработки этого диалогового окна? И второй вопрос: Как я могу получить правильный идентификатор дескриптора диалогового окна в сеансе RDP.
большое спасибо.
Хаген