健壮性、稳定性和你不应该这样做的问题,有没有人通过代码填写过 Windows 凭证提示(所以看起来像这样:)
是否可以通过 Win32 API 或使用 SendKeys/发送鼠标/UI 自动化与这些对话框进行交互?任何人的任何想法/提示将不胜感激!
健壮性、稳定性和你不应该这样做的问题,有没有人通过代码填写过 Windows 凭证提示(所以看起来像这样:)
是否可以通过 Win32 API 或使用 SendKeys/发送鼠标/UI 自动化与这些对话框进行交互?任何人的任何想法/提示将不胜感激!
使用AHK(自动热键)之类的东西,它是一种可以编译为 EXE 的简单语言,旨在实现键盘和鼠标的自动化。
或者您可以从 WPF 执行此操作:http: //social.msdn.microsoft.com/Forums/en-US/wpf/thread/6fc7f1f6-f3e2-4b32-9d2b-9c7a2680e04a/
或者用户可以简单地勾选“记住我的凭据”
我最终使用了UI 自动化框架,它允许我获取对凭据提示的引用,然后填写并以这种方式完成。
代码片段:
AutomationElement desktop = AutomationElement.RootElement;
//get all windows on the desktop
AutomationElementCollection windows = desktop.FindAll(TreeScope.Descendants, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Window));
foreach (AutomationElement window in windows)
{
if (window.Current.ClassName.Equals("#32770")) //security dialog
{
// access the appropriate AutomationElements to enter credentials here
}
}
要与元素交互,您需要获取适当的 Pattern 对象并调用它的方法(例如,文本框有一个 ValuePattern,它有一个 .SetValue() 方法。
我还使用 UISpy 查找 ClassNames、AutomationIds 等的所有值,以帮助通过 .FindAll() 和 PropertyConditions 对象找到正确的项目。