读书人

|ZYCWPF| WINAPI 怎么枚举窗体所有控件

发布时间: 2013-01-23 10:44:50 作者: rapoo

|ZYCWPF| WINAPI 如何枚举窗体所有控件? 谢谢



private void Button_Click_1(object sender, RoutedEventArgs e)
{
richHandle = IntPtr.Zero;
EnumWindows(EnumFunc, 0);
if (richHandle == IntPtr.Zero)
return;
Console.WriteLine(Process_ReadRichEditText(richHandle));
}

public bool EnumFunc(IntPtr hwnd, int lParam)
{
if (!IsWindowVisible(hwnd))
return true; // 不可见

StringBuilder vBuffer = new StringBuilder(256);
GetClassName(hwnd, vBuffer, vBuffer.Capacity);
string name = vBuffer.ToString();
if (vBuffer.ToString() == "TXGuiFoundation")
{
uint vProcessId;

GetWindowThreadProcessId(hwnd, out vProcessId);
var nameid = GetProcessName(vProcessId).ToLower();
if (GetProcessName(vProcessId).ToLower() == "qq.exe")
{
GetWindowText(hwnd, vBuffer, vBuffer.Capacity);
// 标题中含"聊天中"
if (vBuffer.ToString().IndexOf("杜老师") >= 0)
{
//在这里应该是要找这个窗体里面的控件才对啊?为什么这里是枚举他的子窗口?
//还有他这里不会进入@EnumChild方法,我想是因为他找不到这个子窗口的原因?
//那这里怎么来枚举这个窗体的所有控件呢?
//谢谢


EnumChildWindows(hwnd, @EnumChild, lParam);
return false;
}
}
}
return true;
}



我上面用: EnumWindows(EnumFunc, 0); 方法来得到所有窗体
然后在EnumFunc中判断窗体类型是否为:TXGuiFoundation且进程为"qq.exe"
如果是的话判断QQ聊天窗体的标题是否为有:“杜老师”
如果有的话,我就要“枚举这个窗体的所有控件”,来找到聊天输入框
但是现在,我不知道旧城改造以来“枚举这个窗体的所有控件”

谢谢
[解决办法]
spy++有个树状视图的,可以分层显示子窗口

相当于你的enumchildwindows

如果列不出来,那就是没有了。

如果列出来,看看你代码步入的“路径”是否正确。
[解决办法]
lz留个邮箱

读书人网 >C#

热点推荐