在A程序执行时,为了给其他应用程序B的对话框窗口上的按钮发送“点击”的消息,可以这么来实现:
先用EnumWindows来列举所要发送的窗口,接着使用EnumChildWindows来列举这个窗口中的所有控件,找到“下一步”的按钮,然后向它发送消息BM_CLICK,不过该消息要求按钮所在的窗口应该时Active的,所以需要先使B程序的窗口Active,可以通过SetActiveWindow(HWND)来实现,不过现在我把这个句柄给它,它总是返回NULL,即调用失败,这是为什么呢?代码如下:
BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam)
{
if(hwnd == NULL) return false;
char  str[100];
HWND h;
if(GetClassName(hwnd, str, sizeof(str)))
if(!strcmp(str,"Button"))
{
GetWindowText(hwnd, str, 100);
if(!strcmp(str,"下一步"))
{
h = ::GetParent(hwnd);
if(::SetActiveWindow(h) == NULL)
AfxMessageBox("Fail");
else
{
::SendMessage(hwnd, BM_CLICK , 0, 0);
AfxMessageBox("Success");
}
}
return false;
}
return true;
}