自动为 RDP 连接键入密码 (CredentialUIBroker)
Type password automatically for RDP connection (CredentialUIBroker)
作为练习,我正在尝试使用 FlaUI 自动输入 RDP 凭据。
我的 OS 是 Windows 10.
我可以启动 mstsc.exe 并输入 window:
但是后来我得到了这个 window 但我在任何地方都找不到它:
它不是 mstsc window,即使它作为模态出现在它上面 window:mstsc 始终只有一个 window。
显然它是 "Credential Manager UI Host" 的 window,但该进程有...零 windows。
即使在任务管理器中,它也列在后台任务中,而不是在应用程序部分。
FlaUI Inspect 根本看不到它。
顺便说一下,这是我的代码:
var CurrentAutomation = new UIA3Automation();
var Process = Application.Attach(Process.GetProcessesByName("CredentialUIBroker")[0]);
var Windows = Process.GetAllTopLevelWindows(CurrentAutomation); // 0 elements
如何获取此 window 的句柄并使用 FlaUI 访问其文本框?
事实证明,这只是知道 "window" 的名称的问题,它是 Credential Dialog Xaml 主机;另外,可以使用 FlaUI Inspect 找到它。
一旦 mstsc 部分完成并且 "Windows Security" window 出来,您可以继续使用此示例代码:
// Declare all variables, which might be method parameters instead
var Password = "MyLamePassword";
var MaxTimeout = new TimeSpan(10 * 1000 * 2000);
var CurrentAutomation = new UIA3Automation();
var Desktop = CurrentAutomation.GetDesktop();
// Get the window, using a Retry call to wait for it to be available
var CredentialWindow = Retry
.WhileEmpty(
() => Desktop.FindAllDescendants(f => f.ByClassName("Credential Dialog Xaml Host")),
timeout: MaxTimeout,
throwOnTimeout: true)
.Result[0];
// Get the password box
AutomationElement PasswordBox = null;
Retry.WhileNull(
() => PasswordBox = CredentialWindow.FindFirstDescendant(f => f.ByName("Password").And(f.ByControlType(ControlType.Edit))),
timeout: MaxTimeout,
throwOnTimeout: true);
// Type the password
PasswordBox.FocusNative();
Keyboard.Type(Password);
// I have some Retry code here too, just to check that the password is actually typed, and type Enter after it.
CurrentAutomation.Dispose();
作为练习,我正在尝试使用 FlaUI 自动输入 RDP 凭据。 我的 OS 是 Windows 10.
我可以启动 mstsc.exe 并输入 window:
但是后来我得到了这个 window 但我在任何地方都找不到它:
它不是 mstsc window,即使它作为模态出现在它上面 window:mstsc 始终只有一个 window。 显然它是 "Credential Manager UI Host" 的 window,但该进程有...零 windows。
即使在任务管理器中,它也列在后台任务中,而不是在应用程序部分。 FlaUI Inspect 根本看不到它。
顺便说一下,这是我的代码:
var CurrentAutomation = new UIA3Automation();
var Process = Application.Attach(Process.GetProcessesByName("CredentialUIBroker")[0]);
var Windows = Process.GetAllTopLevelWindows(CurrentAutomation); // 0 elements
如何获取此 window 的句柄并使用 FlaUI 访问其文本框?
事实证明,这只是知道 "window" 的名称的问题,它是 Credential Dialog Xaml 主机;另外,可以使用 FlaUI Inspect 找到它。
一旦 mstsc 部分完成并且 "Windows Security" window 出来,您可以继续使用此示例代码:
// Declare all variables, which might be method parameters instead
var Password = "MyLamePassword";
var MaxTimeout = new TimeSpan(10 * 1000 * 2000);
var CurrentAutomation = new UIA3Automation();
var Desktop = CurrentAutomation.GetDesktop();
// Get the window, using a Retry call to wait for it to be available
var CredentialWindow = Retry
.WhileEmpty(
() => Desktop.FindAllDescendants(f => f.ByClassName("Credential Dialog Xaml Host")),
timeout: MaxTimeout,
throwOnTimeout: true)
.Result[0];
// Get the password box
AutomationElement PasswordBox = null;
Retry.WhileNull(
() => PasswordBox = CredentialWindow.FindFirstDescendant(f => f.ByName("Password").And(f.ByControlType(ControlType.Edit))),
timeout: MaxTimeout,
throwOnTimeout: true);
// Type the password
PasswordBox.FocusNative();
Keyboard.Type(Password);
// I have some Retry code here too, just to check that the password is actually typed, and type Enter after it.
CurrentAutomation.Dispose();