怎样才能找出同一窗体类创建的窗体
我有这样的需要,在一应用程序,找出另一程序中的一个窗体类创建的所有窗体,然后将这些窗体名做个列表.
Screen->Forms[i]这个只能找出本程序所有窗体,不行.
HWND FindWindow(
LPCTSTR lpClassName, // pointer to class name
LPCTSTR lpWindowName // pointer to window name
);
这个又只能找出一个,我想找出所有同一窗体类创建的不同名字窗体,有什么办法?
问题点数:20、回复次数:7Top
1 楼Maconel(Maconel)回复于 2005-07-20 16:49:22 得分 0
HWND FindWindowEx(
HWND hwndParent, // handle to parent window
HWND hwndChildAfter, // handle to a child window
LPCTSTR lpszClass, // pointer to class name
LPCTSTR lpszWindow // pointer to window name
);
Top
2 楼g60sl22c()回复于 2005-07-20 17:41:59 得分 0
上面的函数也只能发现一个窗体呀Top
3 楼Maconel(Maconel)回复于 2005-07-20 17:59:17 得分 0
第二个参数hwndChildAfter,可以指定从这个窗口之后开始查找,也就是查找下一个。
例如下面代码,就是查找所有以桌面为父窗体,类名为“#32770”的窗体,并将他们的text显示在ListBox中。
HWND hWnd = NULL;
while ((hWnd = FindWindowEx(NULL, hWnd, "#32770", NULL)) != NULL)
{
char arr_cText[MAX_PATH];
GetWindowText(hWnd, arr_cText, MAX_PATH);
ListBox1->Items->Add(arr_cText);
}
Top
4 楼Maconel(Maconel)回复于 2005-07-20 18:02:30 得分 20
GetWindow函数和EnumWindows函数,也可以遍历所有的窗体。
然后用GetClassName函数可以取得这个窗体的类名,以次可以判断是否为你需要的窗体。
这几个函数的具体用法,自己去查相关资料吧。Top
5 楼g60sl22c()回复于 2005-07-20 18:31:43 得分 0
我是有点说得不清的,我要找寻的窗体是 不是自己编的软件的插件,所以主窗体是不同的,而插件窗体名也因用在不同软件而有所不同Top
6 楼g60sl22c()回复于 2005-07-20 19:07:19 得分 0
改为以下这样 编译又出错
HWND hWnd = NULL;
while ((hWnd = FindWindowEx(NULL, hWnd, NULL, Ttoolwin)) != NULL)
{
char arr_cText[MAX_PATH];
GetWindowText(hWnd, arr_cText, MAX_PATH);
ListBox1->Items->Add(arr_cText);
}
Ttoolwin是另一程序上的窗体类名,编译说无定义Top
7 楼g60sl22c()回复于 2005-07-20 21:37:48 得分 0
终于看明白,多谢Maconel(Maconel).Top




