我正在嘗試查找給定窗口的所有子控件。我可以得到窗口的句柄,我已經使用Inspect.exe
(來自Windows開發工具包)進行了驗證。問題是當我打電話FindWindowEx
函數返回0(IntPtr.Zero
準確),而我可以找到與Inspect.exe
控件。FindWindowEx在特定應用程序上使用時返回0
這裏是我的代碼
[DllImport("user32.dll", SetLastError=true)]
private static extern IntPtr FindWindowEx(IntPtr parentHandle,
IntPtr childAfter, string className, string windowTitle);
public static List<IntPtr> EnumChildren(IntPtr hwnd)
{
IntPtr zero = IntPtr.Zero;
List<IntPtr> list = new List<IntPtr>();
do
{
zero = FindWindowEx(hwnd, zero, null, null); // Returns 0
if (zero != IntPtr.Zero)
{
list.Add(zero);
}
}
while (zero != IntPtr.Zero);
return list;
}
我已經使用以下嘗試,它都返回0,以及:
zero = FindWindowEx(hwnd, zero, "TextBox", null);
zero = FindWindowEx(hwnd, zero, "TextBox", "Text");
zero = FindWindowEx(hwnd, zero, String.Empty, String.Empty);
zero = FindWindowEx(hwnd, zero, "TextBox", String.Empty);
我知道有辦法找到該窗口的控件Inspect.exe
是正在做。我試過使用EnumChildWindows
,但得到相同的結果,例如一個空的列表。請注意,與其他軟件(我迄今爲止嘗試使用Thunderbird和KeePass)FindWindowEx
函數可以正常工作,而不是與我一起工作的應用程序。
我已經使用EnumChildWindows
進行了測試,以確保只有一個窗口的標題我正在尋找,它是唯一的一個。我真的無法解釋爲什麼我不能得到任何控制。
我在做什麼錯了,是否有另一種方法獲得給定窗口的所有子窗口?
恩,Inspect使用輔助功能樹,而不是窗口樹。 –
我打算枚舉窗口對象,事先用Spy ++檢查,而不是檢查。 – manuell