如果一个程序正在运行,你想得到他的句柄并不难,大家都知道的,用CWnd::FindWindow()函数
如果要得到这个程序里面的一个按钮的句柄怎么做呢?看下面....
EnumChildWindows可是个好东西,可以枚举一个父窗口的所有子窗口:
BOOL EnumChildWindows(
HWNDhWndParent, // handle to parent window // 父窗口句柄
WNDENUMPROClpEnumFunc, // callback function // 回调函数的地址
LPARAMlParam // application-defined value // 你自已定义的参数
);
就这么简单,让我们再定义一个回调函数,像下面这样:
BOOL CALLBACK EnumChildProc(
HWNDhwnd, // handle to child window
LPARAMlParam // application-defined value
);
注意:这个回调函数要么是类的静态函数,要么就是一个全局的函数。
在调用EnumChildWindows 这个函数时,直到调用到最个一个子窗口被枚举或回调函数返回一个false,否则将一直枚举下去。
有了上面的知识,我想你应该知道怎么做了。
例子:
如果一个标题为"注册机"的程序,它的里面有一个按钮被隐藏了,这个隐藏的按钮是"试用",我们要他显示出来.
/
BOOL CALLBACK EnumChildProc( HWND hwnd, LPARAM lParam)//先定义这个回调函数
{
CWnd *p=CWnd::FromHandle(hwnd);
CString str;
p->GetWindowText(str);
if(str=="试用")
{
p->ShowWindow(SW_SHOW);
return 0; //返回0就停止枚举
}
return TRUE;
}
void CMy00Dlg::OnButton2()
{
HWND hwnd = ::FindWindow(NULL,"注册机");
::EnumChildWindows(hwnd,EnumChildProc,0);
}