参照lihuasoft大虾在http://topic.csdn.net/u/20080313/00/5e2add09-6103-405f-8f6b-6bbb220e9cfd.html中的回复,类似的用VC做了一个,代码如下:
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
HWND hWnd = (HWND)lParam;//lParam是主窗口的窗口句柄
HWND hChild = ::FindWindowEx(hWnd, NULL, "Button", "确定");
if(hChild != NULL)
{
::SendMessage(hChild, WM_LBUTTONDOWN, 0, 0);
::SendMessage(hChild, WM_LBUTTONUP, 0, 0);
}
return TRUE;
}程序主界面里有个webbrowser控件,会出来一个确定的模态对话框(标题是"Microsoft Internet Explorer"),原本需手工去点击“确定”,程序才能继续运行。于是就想用代码区实现自动点击,按照lihuasoft的方法,在OnTimer里调用EnumWindows,然后转到EnumWindowsProc,但是死活找不到“确定”按钮的窗口句柄,每次都返回NULL;而::FindWindowEx(hWnd, NULL, "Button", "取消");去找主窗口上的一个“取消”按钮,能找到。
另外从Spy++中,发现"Microsoft Internet Explorer"窗口的Owner Window和Parent Window均为我的主界面,而该窗口上的“确定”按钮的Parent Window为"Microsoft Internet Explorer"窗口,Owner Window为(None)。
求解。
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
HWND hWnd = (HWND)lParam;//lParam是主窗口的窗口句柄
HWND hChild = ::FindWindowEx(hWnd, NULL, "Button", "确定");
if(hChild != NULL)
{
::SendMessage(hChild, WM_LBUTTONDOWN, 0, 0);
::SendMessage(hChild, WM_LBUTTONUP, 0, 0);
}
return TRUE;
}程序主界面里有个webbrowser控件,会出来一个确定的模态对话框(标题是"Microsoft Internet Explorer"),原本需手工去点击“确定”,程序才能继续运行。于是就想用代码区实现自动点击,按照lihuasoft的方法,在OnTimer里调用EnumWindows,然后转到EnumWindowsProc,但是死活找不到“确定”按钮的窗口句柄,每次都返回NULL;而::FindWindowEx(hWnd, NULL, "Button", "取消");去找主窗口上的一个“取消”按钮,能找到。
另外从Spy++中,发现"Microsoft Internet Explorer"窗口的Owner Window和Parent Window均为我的主界面,而该窗口上的“确定”按钮的Parent Window为"Microsoft Internet Explorer"窗口,Owner Window为(None)。
求解。
HWND hIE = ::FindWindowEx(m_hWnd, NULL, NULL, "Microsoft Internet Explorer"); //找到IE这个子窗口
if ( hIE != NULL )
{
HWND hBtn = ::FindWindowEx(hIE, NULL, NULL, "确定"); //找到确定按钮句柄
if (hBtn != NULL)
{
// 偶尔出错,发送失败,加个while判断一下。
while (!::PostMessage(hBtn, BM_CLICK, 0, 0))
{
if (::IsWindow(Btn))
Sleep(20);
else
break;
}
}
}
alert 出来的messagebox,有的你需要点掉,有的你不需要点掉?
你怎么知道那个需要点掉,那个不需要点掉?