1

我有一个在无人值守机器上运行的应用程序。当此应用程序遇到问题时,它会弹出一个消息框(使用与主窗口相同的标题),需要单击“确定”将其关闭。我要做的是识别应用程序何时弹出消息框并做出相应的响应。

我知道 AutoIt 有一个名为 WinWait 的函数,它可以让您检查窗口的内容(而不是标题)并获取窗口的句柄。有没有办法可以在 C# 中做类似的事情?

我确实进行了扫描,但找不到任何关于此的具体内容。我已经可以通过标题获取窗口,但需要阅读消息框内容以识别消息框。

4

2 回答 2

3

您需要 pInvoke 到 EnumWindows:

http://www.pinvoke.net/default.aspx/user32.enumwindows

然后,您可以遍历窗口并比较标题。

更新:由于控件也是窗口,因此您也可以遍历它们。因此,您可以查找可能包含您要查找的文本的特定标签控件。如果您使用 Spy++,您可以确定您正在寻找的特定控件的特征(例如窗口类),以帮助您缩小搜索范围。

于 2013-01-03T15:56:06.563 回答
0

GUI 窗口不包含文本,它包含像素。其中一些像素可能被安排为以文本形式出现在人类读者面前,但除非窗口公开一个界面来获取其文本,否则如果没有复杂的 OCR,您将无法阅读它。话虽如此,大多数常用控件确实公开了这样的接口。如果窗口由标签(静态)、编辑框(编辑)等组成,您可以枚举那些子窗口并读取它们的文本。例如,一个标准消息框包含一个可以阅读的标签控件。请注意,并非所有应用程序都使用标准控件或对话框。

这是在标准消息框中读取标签控件的解决方案: https ://stackoverflow.com/a/5982827/351385

于 2013-01-03T16:24:53.573 回答