如何获取其它程序弹出的对话框,将其关闭

myrou 2006-04-06 11:40:42
现有一程序,将会调用多个DLL,在DLL调用中,有可能会弹出对话框提示窗口,因此程序为后台自动运行,应如何才能捕获弹出的提示窗口,将其关闭或者触发“确定”单击事件?
...全文
324 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
coolge2005 2006-04-06
  • 打赏
  • 举报
回复
这样就可以用商业的控件了!!
myrou 2006-04-06
  • 打赏
  • 举报
回复
好,试试,谢谢
dirdirdir3 2006-04-06
  • 打赏
  • 举报
回复
hook了messageboxa,不让其弹出来就可以了。
huaboy408 2006-04-06
  • 打赏
  • 举报
回复
FindWindow查找窗口
FindWindowEx查找窗口内控件
baqiao1211 2006-04-06
  • 打赏
  • 举报
回复
hwnd=findwindow(...);
PostMessage(hwnd,WM_CLOSe,0,0);
Steven7 2006-04-06
  • 打赏
  • 举报
回复
获取对话框的title,直接close,或者进入获取其中的按钮,然后发click消息

具体技术细节参考我的经验总结:

6、对系统中其他窗口的操作
(1) SetFocus();//Dlg类中,窗口得到焦点
CenterWindow();//Dlg类中,窗口居中

CWnd* pPrevWnd = CWnd::FindWindow(NULL,"CashFiesta"); //定位到某个窗口
char strWin[80];
pPrevWnd->GetWindowText(strWin,60);//得到窗口标题
pPrevWnd->MessageBox (strWin);//显示得到的窗口标题

if (strcmp(strWin,"CashFiesta")==0)//如果窗口标题是 CashFiesta 则 //这个语句有问题改用下面一个
if (pPrevWnd!=NULL)//如果确实有窗口标题是 CashFiesta的,则

pPrevWnd->MoveWindow(747,757,280,80,TRUE);//移动窗口到x=747,y=757, 宽度=280,高度=80,重绘
pPrevWnd->SendMessage(WM_CLOSE);//关闭窗口

if (pPrevWnd->IsIconic())//如果窗口已经最小化
pPrevWnd->ShowWindow(SW_RESTORE);//显示窗口,恢复

/* 依次得到所有窗口
CWnd* pPrevWnd = CWnd::FindWindow(NULL,NULL);
while (pPrevWnd)
{
pPrevWnd = pPrevWnd->GetWindow(GW_HWNDNEXT);
}
*/
(2) CWnd* pPrevWndL = CWnd::FindWindow(NULL,"CashFiesta Login");
HWND handMain=::FindWindowEx(NULL,NULL,NULL,_T("CashFiesta Login"));

这两个语句都是找到窗口 "CashFiesta Login",可以共存在一个代码段中,只是返回值的类型不同,便于不同应用,
FindWindowEx也可以用于查找窗口中的控件,例如:
HWND hwnd1=::FindWindowEx(handMain,NULL,_T("EditBar"),NULL);//查找定位到窗口 "CashFiesta Login"中的第一个EditBar控件(实际没有EditBar,只是用来说明如何取一个控件内部的控件)
HWND hwnd2=::FindWindowEx(hwnd1,NULL,_T("Edit"),NULL);//查找定位到窗口 "CashFiesta Login"中的第一个EditBar控件中的EDIT控件

7、向另外的程序窗口中的控件发消息

HWND handMain=::FindWindowEx(NULL,NULL,NULL,_T("CashFiesta Login"));//CashFiesta Login是其他程序的窗口标题
if(handMain )//如果有那样的一个窗口打开
{
HWND hwndEdit=::FindWindowEx(handMain,NULL,_T("Edit"),NULL);
HWND hwndButton=::FindWindowEx(handMain,NULL,_T("Button"),_T("OK"));
if (hwndEdit)
{
char sz[255];
strcpy(sz,"StevenMzq");
::SendMessage(hwnd2,WM_SETTEXT,255,(long)sz);//向Edit控件中加入字符串 StevenMzq
::SendMessage(hwnd2,WM_GETTEXT,255,(long)sz);//将Edit控件中的内容存入字符串 sz

}

if (hwndButton)
{
::SendMessage(handMain,WM_COMMAND,1,(long)hwndButton);//模拟向button击键--重要!!
上面语句有时并不能实现模拟向button击键,用下面两行语句
int nButtonID=::GetDlgCtrlID(hwndButton);//由 Button的句柄得到其ID
::SendMessage(handMain,WM_COMMAND,nButtonID,0);//模拟向button击键


char sz[255];
strcpy(sz,"StevenMzq");
::SendMessage(hwnd2,WM_SETTEXT,255,(long)sz);//将Button控件的标题改为字符串 StevenMzq
::SendMessage(hwnd2,WM_GETTEXT,255,(long)sz);//将Button控件的标题存入字符串 sz

}
oyljerry 2006-04-06
  • 打赏
  • 举报
回复
或FindWindow查找窗口

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧