我需要从其他应用程序获取控件,但只需要文本框控件。
我该怎么做?
我现在有这个代码:
public static List<IntPtr> FindWindowControl(IntPtr hWnd)
{
List<IntPtr> result = new List<IntPtr>();
GCHandle listHandle = GCHandle.Alloc(result);
try
{
Helpers.WinApi.EnumWindowProc childProc = new Helpers.WinApi.EnumWindowProc(EnumWindow);
Helpers.WinApi.EnumChildWindows(hWnd, childProc, GCHandle.ToIntPtr(listHandle));
}
finally
{
if (listHandle.IsAllocated)
listHandle.Free();
}
return result;
}
private static bool EnumWindow(IntPtr handle, IntPtr pointer)
{
GCHandle gch = GCHandle.FromIntPtr(pointer);
List<IntPtr> list = gch.Target as List<IntPtr>;
if (list == null)
throw new InvalidCastException("GCHandle Target could not be cast as List<IntPtr>");
string className = Helpers.WinApi.GetWinClass(handle);
if (className.Equals("Edit") || className.Equals("RICHEDIT60W"))
{
list.Add(handle);
return false;
}
return true;
}
问题是,对于在.NET中创建的应用程序,TextBoxes是使用其他类创建的,因此找不到它们。
使用Spy ++时,我看到文本框控件有一个名为的类: WindowsForms10.EDIT.app.0.141b42a_r14_ad1。
这表明我不能使用类名,或者,我可以在类名中安全地查找EDIT这个词吗?