如何能够检测到在某个应用程序的对话框中是点击了“确认”button还是“取消”button??

njiceshihong8 2003-10-20 10:40:34
如何能够检测到在某个应用程序的对话框中是点击了“确认”button还是“取消”button??
...全文
33 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangchun_xn 2003-10-21
  • 打赏
  • 举报
回复
halibut(乡下人) :
这样做不会非法操作把,因为新的WNDPROC的地址是我的,并不是对方的阿,会不会发生访问异常,除非新的WNDPROC已经用dll注入到对方的进程中去。
jiangchun_xn 2003-10-20
  • 打赏
  • 举报
回复
API Hook,非常复杂的技术,截取其它进程MessageBox的返回值。程序员杂志上有,查查。
huangjuliang 2003-10-20
  • 打赏
  • 举报
回复
你到底什么意思?说清楚呀!
njiceshihong8 2003-10-20
  • 打赏
  • 举报
回复
我是检测另外一个应用程序的对话框中的点击情况,不是在本应用程序中!
有什么办法吗?
beyondzhx 2003-10-20
  • 打赏
  • 举报
回复
MessageBox(FormPlanMain->Handle, "是否删除所选项目", "警告", MB_YESNO | MB_ICONINFORMATION) == ID_NO) return;
huangjuliang 2003-10-20
  • 打赏
  • 举报
回复
你点击了“确认”button,设置一个参数就可以了,根据参数来判断·
halibut 2003-10-20
  • 打赏
  • 举报
回复
用 GetWindowLong()和SetWindowLong()也可以做.
首先你要取得要监视的对话框的句柄hwnd,用GetWindowLong(hwnd,GWL_WNDPROC)取得窗口原来的WNDPROC函数地址,并保存,用SetWindowLong(hwnd,GWL_WNDPROC,lpfnWndProc)设成你的一个新WNDPROC函数地址,这样你就可以拦截这个窗口的所有消息了,在你的WNDPROC中拦截COMMAND消息,判断wParam的值是IDOK还是IDCANCEL就知道了,需要注意的是在你的WNDPROC中,对于所有的消息要先调用你事先保存的原窗口的WNDPROC函数,这样程序才能正常执行,在你需要撤消对该窗口的拦截时,请用SetWindowLong(hwnd,GWL_WNDPROC,lpfnOldWndProc)恢覆窗口的原WNDPROC地址.
qiu_allan 2003-10-20
  • 打赏
  • 举报
回复
是的,要截取其它进程的MessageBox的返回值。要用钩子,有点繁。

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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