按窗口中包含的文本查找窗口句柄

时间:2013-01-03 15:53:11

标签: c# winforms

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

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

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

2 个答案:

答案 0 :(得分:3)

你需要pInvoke到EnumWindows:

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

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

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

答案 1 :(得分:0)

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

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