Проблема FindWindowByClassNameAndRegex со специальными символами - PullRequest
0 голосов
/ 24 января 2011

Для нашего тестирования программного обеспечения у нас есть тест, который позволяет нам проверить, открыты ли определенные окна, используя вызов FindWindowByClassNameAndRegex P / Invoke. Проблема, которую мы получаем, заключается в том, что когда у нас открыты окна с более чем определенным количеством специальных символов, мы всегда получаем IntPtr.Zero в качестве возврата. Есть ли известные проблемы с этим? Вот код, который мы используем, чтобы найти окно: (в данном случае это окно для Firefox) Regex windowTitleRegex = new Regex(Regex.Escape(fullWindowTitle).Replace("\?", "."), RegexOptions.IgnoreCase | RegexOptions.ECMAScript); curWindowHandle = NativeMethods.FindWindowByClassNameAndRegex("MozillaUIWindowClass", windowTitleRegex);

Где заголовок окна ~`!@#$%^&*()_-+={[}]|:;'<,>.?/\"àëÉùÙâÏûâÏûÊÛçîÀË«éïÂλœÇÔêôÈŒ\ (Нет фактического переноса строки, это просто форматирование)

1 Ответ

2 голосов
/ 24 января 2011

Нет функции Windows API с таким именем.Я предполагаю, что вы нашли какую-то DLL, которая экспортирует эту функцию.Шансы на то, что регулярное выражение, которое использует эта DLL, всегда хороши, не совсем соответствуют синтаксису, используемому классом Regex .NETЕсть много диалектов.

Лучше всего сделать, чтобы вызвать EnumWindows ().Вы можете использовать свой собственный Regex в обратном вызове для фильтрации, GetClassName () возвращает имя класса окна.Если вы уже знаете имя окна, просто используйте FindWindow ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...