2011-01-24 3 views
0

소프트웨어 테스트에는 FindWindowByClassNameAndRegex P/Invoke 호출을 사용하여 특정 창이 열려 있는지 확인하는 테스트가 있습니다. 우리가 얻을 수있는 문제는 특정 숫자 이상의 특수 문자로 창이 열리면 항상 IntPtr.Zero를 반환합니다. 이 문제와 관련하여 알려진 문제가 있습니까? 여기에 우리가 창을 찾기 위해 사용하는 코드의 일부입니다 : 윈도우의 제목이 ~`[email protected]#$%^&*()_-+={[}]|:;'<,>.?/\"àëÉùÙâÏûâÏûÊÛçîÀË«éïÂλœÇÔêôÈŒ\ 인 경우 Regex windowTitleRegex = new Regex(Regex.Escape(fullWindowTitle).Replace("\?", "."), RegexOptions.IgnoreCase | RegexOptions.ECMAScript); curWindowHandle = NativeMethods.FindWindowByClassNameAndRegex("MozillaUIWindowClass", windowTitleRegex); FindWindowByClassNameAndRegex 문제 (특수 문자 포함)

(는 파이어 폭스 윈도우의이 경우)

(실제 라인 그냥 형식 일이 깰있다)
+1

'FindWindowByClassNameAndRegex' 란 무엇입니까? – Tergiver

+0

@Tergiver : Windows의 네이티브 함수 호출로 Window 클래스 이름과 주어진 정규식과 일치하는 창 핸들을 반환합니다. –

+0

인코딩 문제가있을 수 있습니다. –

답변

2

해당 이름의 Windows API 함수가 없습니다. 이 함수를 내보내는 DLL을 찾은 것 같습니다. 확률은 항상이 DLL이 사용하는 정규식이 .NET의 Regex 클래스가 사용하는 구문과 완전히 일치하지 않는 어떤 종류의 것이 좋다. 방언이 많이 있습니다.

최선의 일은 EnumWindows()를 pinvoke하는 것입니다. 당신은 필터에 콜백에서 자신의 Regex를 사용할 수 있습니다, GetClassName() 당신에게 창 클래스 이름을 가져옵니다. 이미 창 이름을 알고 있다면 FindWindow()를 사용하십시오.

+0

혼란 스럽지만 죄송합니다. 라이브러리에 글이 쓰여 있습니다. (누군가 NativeMethod를 잘못 배치했습니다.) GetTopLevelwindows 및 GetClassName을 사용합니다. 그것은 C로 작성된 # 그래서 우리는 자바 스크립트를 사용하여 파이어 폭스에서 창 제목을 얻을 이후 일치하는 문제가 표시되지 않습니다. –

+0

탈출해서는 안되는 이스케이프 문자 인 코드에 오타가 묻어났습니다. 생각해 줘서 고마워. –