我使用 spy++ 来找到所需 Windows 控件的正确句柄,该控件属于不受管理的独立应用程序。请注意,spy++“属性检查器”提到此窗口没有任何子(或父)窗口。
我还设法使用以下代码取回窗口的名称:
//the invokes are included aswell
const int WM_GETTEXT = 0x000D;
static void Main(string[] args)
{
IntPtr handle = new IntPtr(Convert.ToInt32("00070818", 16));
int nChars = GetWindowTextLength(handle); //win32 function
int length = 200;
StringBuilder sb = new StringBuilder(length);
SendMessage(handle, WM_GETTEXT, length, sb);
Console.WriteLine(sb.ToString());
}
这个窗口比它的标题有更多的信息,这就是我似乎用 WM_GETTEXT 得到的所有信息(将长度的值更改为 200 没有帮助,无论如何都是一个长镜头)。
接下来,我尝试了一种使用 UI 自动化的不同方法:
static void Main(string[] args)
{
AutomationElement target = AutomationElement.FromHandle(handle);
TextPattern textPattern = target.GetCurrentPattern(TextPattern.Pattern) as TextPattern;
}
但我得到了这个错误:
UIAutomationClient.dll 中出现“System.InvalidOperationException”类型的未处理异常
附加信息:不支持的模式。
最重要的是,我也尝试过使用 Microsoft Inspect.exe,但在 UI 自动化和 MSAA 模式下,它都无法专注于窗口中的文本。
是不是说数据不能用 UI 自动化实现??还是我应该只是使用错误的方法/类型?
除了使用 GetWindowText、WM_GETTEXT 或 UI 自动化之外,还有其他方法可以从此窗口获取数据吗?
我对这些东西还很陌生,但我正在努力学习。此外,我没有当前的潜在客户,因此非常感谢任何有用的评论/答案!如果您确实回答,请务必包含有用的关键字,以便我能够了解有关您的解决方案的更多信息