FindWindowEx失败的原因,十万火急。 - C++ Builder / Windows SDK/API
一个窗口程序,上面有两个组件,一个按钮,一个TEdit,TEdit的名称是Edit1,类当然就是TEdit。按钮代码如下:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HWND hDNFWnd,Num;
char NumString[255];
char *p;
DWORD hWnd;
p = NumString;
if (TRUE) {
HWND hMain = ::GetModuleHandle(NULL);
if (hMain) {
Num = ::FindWindowEx(hMain,0,"TEdit","Edit1");
MessageBox(NULL,"查找到主窗口","查找到主窗口",NULL);
if (Num) {
::SendMessage((HWND)hWnd,WM_GETTEXT,50,(long)p);
MessageBox(NULL,p,p,NULL);
NumString[0] = 'c';
MessageBox(NULL,p,p,NULL);
}
}
}
}
每次单击按钮,都会弹出第一个提示框,也就是说,主窗口句柄获取成功。
但是使用FindWindowEx查找子窗口,却始终都是失败。
[解决办法]
实际上你的 hMain 并不是你想象中的主窗口 Handle,可以这样使用
Num = ::FindWindowEx(this->Handle, 0, "TEdit", "Edit1");
[解决办法]
GetModuleHandle返回的是模块的句柄,并不是主窗体的句柄。所以FindWindowEx失败是很正常的。