如何获取模态对话框,并执行它的确定按钮
时间:2010-12-02
来源:互联网
获得这个窗口的句柄,然后给这个窗口发一条确认的消息就行(就是点击上面的确认按钮).
Assembly code
include gdi32.inc includelib gdi32.lib include user32.inc includelib user32.lib include kernel32.inc includelib kernel32.lib .data fwin dd ? .code start: invoke GetForegroundWindow mov fwin,eax invoke SendMessage,fwin,WM_ENABLE,NULL,NULL end start
这个我写的,貌似不成功
作者: finkle_zhang 发布时间: 2010-12-02
再就是“确定”按钮,如果是标准的“确定”按钮,其 ID 为 2,可以直接向窗口发它的 WM_COMMAND 消息以触发“确定”按钮。
作者: zara 发布时间: 2010-12-02
用什么方法可以枚举那个窗口,我现在知道的就是那个窗口是模态的.
还有发送确认消息的语句是不是这样的: invoke SendMessage,fwin,WM_COMMAND,MB_OK,NULL
这样直接地 GetForegroundWindow() 很可能不到要操作的那个窗口吧。你怎么运行自己的这个程序呢,即便是你自己这个程序没有窗口,这时前台窗口也应该是你启动你这个程序的那个窗口,比如“我的电脑”或“命令行窗口”。所以,可靠的方法,还是枚举确定目标窗口。
再就是“确定”按钮,如果是标准的“确定”按钮,其 ID 为 2,可以直接向窗口发它的 WM_COMMAND 消息以触发“确定”按……
作者: finkle_zhang 发布时间: 2010-12-02
如果是标准的“确定”按钮,通常 invoke SendMessage,fwin,WM_COMMAND,MB_OK,NULL 就该可以的。可以先用 c++ 里的那个 Spy++ 查看下这个“确定”吧。
作者: zara 发布时间: 2010-12-02
Assembly code
include windows.inc include gdi32.inc includelib gdi32.lib include user32.inc includelib user32.lib include kernel32.inc includelib kernel32.lib .data fwin dd ? cwin dd ? szCaption db 'Microsoft Internet Explorer',0 szClassName db 'IEFrame',0 .code start: invoke FindWindow,offset szClassName,NULL mov fwin,eax invoke GetWindow,fwin,GW_CHILD mov cwin,eax invoke PostMessage,cwin,WM_COMMAND,MB_OK,NULL invoke ExitProcess,NULL end start
遍历枚举窗口,可以通过 EnumWindows() 和 EnumChildWindows() 进行,判断的依据要看具体情形了,有类名、窗口标题、子件的状况等等。虽然 FindWindow() 也可以简单地找到某些窗口,但不如前面两函数的可靠和灵活,但胜在简单,或许也可以试试。
如果是标准的“确定”按钮,通常 invoke SendMessage,fwin,WM_COMMAND,MB_OK,NU……
作者: finkle_zhang 发布时间: 2010-12-02
作者: zara 发布时间: 2010-12-02
作者: finkle_zhang 发布时间: 2010-12-02
作者: zara 发布时间: 2010-12-02
这时向下,应该用 EnumChildWindows(hWndIE, ...) 吧。第一个参数是 IE 浏览器的窗口句柄,即遍历谁的子窗口;第二个是回调函数,即对每个子窗口,包括子窗口的子窗口,都调用该函数下;第三个参数是回调函数的参数,需要的话,才用到。可以看看 msdn 里的 c 的例子。
作者: finkle_zhang 发布时间: 2010-12-02
作者: zara 发布时间: 2010-12-02
传递给回调函数的就是子窗口的句柄,是否符合你的要求,就得回调函数自己检查该窗口的标题了。回调函数可以通过返回 FALSE 随时终止遍历,比如在已经遇到了需要的窗口时。
作者: finkle_zhang 发布时间: 2010-12-02
作者: zara 发布时间: 2010-12-02
作者: bobo98405208 发布时间: 2010-12-02
EnumChildWindow proc uses ebx edi esi hWnd,wMsg,wParam,lParam LOCAL @caption LOCAL @hDc LOCAL @szBuffer[128]:byte mov eax,lParam mov @caption,eax mov eax,hWnd mov @hDc,eax invoke GetWindowText,addr @hDc,addr @szBuffer,128 .if ? ret .else xor eax,eax .endif ret EnumChildWindow endp ----------------------------------------------- invoke EnumChildWindows,fwin,offset EnumChildWindow,offset szCaption
是不是像这样的,获取子窗口标题后,如何和预定义的标题相比较呢
作者: finkle_zhang 发布时间: 2010-12-02
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28