具有特殊字符的FindWindowByClassNameAndRegex问题

时间:2011-01-24 16:26:52

标签: c# regex pinvoke

对于我们的软件测试,我们有一个测试,让我们使用FindWindowByClassNameAndRegex P / Invoke调用检查某些窗口是否打开。我们得到的问题是,当我们打开超过一定数量特殊字符的窗口时,我们总是以IntPtr.Zero作为回报。这有什么已知的问题吗?这是我们用来查找窗口的一些代码:(在这种情况下,它是用于firefox窗口的) Regex windowTitleRegex = new Regex(Regex.Escape(fullWindowTitle).Replace("\?", "."), RegexOptions.IgnoreCase | RegexOptions.ECMAScript); curWindowHandle = NativeMethods.FindWindowByClassNameAndRegex("MozillaUIWindowClass", windowTitleRegex);

窗口标题为~`!@#$%^&*()_-+={[}]|:;'<,>.?/\"àëÉùÙâÏûâÏûÊÛçîÀË«éïÂλœÇÔêôÈŒ\ (没有实际的换行符,只是格式化的东西)

1 个答案:

答案 0 :(得分:2)

该名称没有Windows API函数。我猜你发现了一些导出这个功能的DLL。这个DLL使用的正则表达式与某些类型的结果总是很好,这与.NET的Regex类使用的语法不完全匹配。有很多方言。

要做的最好的事情就是将EnumWindows()锁定。您可以在回调中使用自己的Regex进行过滤,GetClassName()可以获取窗口类名称。如果您已经知道窗口名称,那么只需使用FindWindow()。