2011-01-24 36 views
0

對於我們的軟件測試,我們有一個測試,讓我們檢查某些窗口是否打開使用FindWindowByClassNameAndRegex P/Invoke調用。我們得到的問題是當我們打開超過一定數量的特殊字符的窗口時,我們總是將IntPtr.Zero作爲返回值。有沒有任何已知的問題呢?下面是一些我們使用查找窗口的代碼(在這種情況下,它是一個Firefox窗口) Regex windowTitleRegex = new Regex(Regex.Escape(fullWindowTitle).Replace("\?", "."), RegexOptions.IgnoreCase | RegexOptions.ECMAScript); curWindowHandle = NativeMethods.FindWindowByClassNameAndRegex("MozillaUIWindowClass", windowTitleRegex); FindWindowByClassNameAndRegex問題與特殊字符

凡窗口的標題是~`[email protected]#$%^&*()_-+={[}]|:;'<,>.?/\"àëÉùÙâÏûâÏûÊÛçîÀË«éïÂλœÇÔêôÈŒ\ (有沒有實際的行打破它只是一個格式化的東西)

+1

什麼是FindWindowByClassNameAndRegex? – Tergiver 2011-01-24 17:00:32

+0

@Tergiver:這是Windows中的本地函數調用,它將窗口句柄返回到與Window類名稱和給定正則表達式匹配的窗口。 – 2011-01-24 17:02:52

回答

2

該名稱沒有Windows API函數。我猜你已經找到了一些導出這個函數的DLL。賠率總是很好,這個DLL使用的正則表達式與.NET的Regex類使用的語法並不完全匹配。有很多方言。

最好的辦法是鎖定EnumWindows()。你可以在回調中使用你自己的正則表達式來過濾,GetClassName()讓你獲得窗口類的名字。如果您已經知道窗口名稱,那麼只需使用FindWindow()。