vb6插件开发,点击运行后如何关闭MSGBOX

专注VB编程开发20年 2017-07-11 02:03:08
用VBE代码控制点了运行然后需要停止,
但是在VB6中运行的工程弹出一个MSGBOX对话框,结果导致点停止也只有一半效果(关闭弹窗程序也就结束了)

不是关闭VB6,只是为了停止运行VB6A工程,然后修改下代码继续运行,或者自动打开下一个工程,自动化的

如果手工按键模拟“CTRL+BREAK"就会暂停运行,再点停止,这是有效的
但是这就不是VBE里面可以直接做到了。
...全文
4786 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
@Chen8013,比如保存工程,一般是会先保存每一个窗体,模块,最后再保存工程,可以检测工程是否保存,这个VBE插件里有这个状态,这是一种方法。这样就只能不断的循环,检测是否保存成功。 然后插件里面还有一种是文件监控法,就是保存了哪个文件会产生事件,比如当前工程文件保存后,代表工程真正保存成功了。 这种就要用到异步的方法了,不在同一个过程中实现。 还有编绎成EXE,也是这样,先获取工程要编绎生成EXE的路径,然后不断检测是否该文件是否生成成功。 有时需要事件机制,可是又很难,比如你点文件另存为,这样一个弹窗(多个不同进程),用HOOK窗口变动,竟然没办法拦截到。另存为或“文件打开”,只是一个窗体中的内部功能一样,是由一个DLL实现的弹窗“,和普通的窗体全新创建不是一回事。 以下方法无效,几天也没搞定。
SetWindowsHookEx(WH_CBT, _
                                AddressOf MsgBoxHookProc, _
                                hInstance, hThreadId)
  • 打赏
  • 举报
回复
引用 4 楼 of123 的回复:
真心没看懂。
就是想用代码实现对VB6工程的自动运行,暂停,停止。 一种方法是用VB6的插件原理,ADDIN,那个可以对菜单,工具条上的所有功能进行控制,如果没有碰到MSGBOX这样的弹窗,或者死循环,一切正常。可以运行,暂停。 但是碰到弹窗,就只能手工去关闭弹窗了
Private Sub Form_Load()
MsgBox Now
Do While True
Loop
End Sub
  • 打赏
  • 举报
回复
引用 9 楼 Chen8013 的回复:
几天没来了不好意思,我现在想到的一个方法是把该工程设置为前台获得焦点,然后再把最前面显示的窗口设置为焦点,比如msgbox窗口,然后再前台模拟按下ctrl+break SetActiveWindow hwnd keybd_event 3, 0, 0, 0 '3=ctrl+break 难道就没别的方法了?
赵4老师 2017-07-21
  • 打赏
  • 举报
回复
msvbvm60.dll里面不知道是否提供了有关暂停和继续VB6虚拟机运行的功能。 难不成要Hook或Inject msvbvm60.dll?
舉杯邀明月 2017-07-18
  • 打赏
  • 举报
回复
引用 8 楼 xiaoyao961 的回复:
[quote=引用 3 楼 zhao4zhong1 的回复:] https://technet.microsoft.com/en-us/sysinternals/pssuspend
vb6里面菜单,工具条很多,我用VB插件的方法实现了,就是VBIDE的库来处理 但是他是属于异步的,就是点击之后他不等完成就返回了 比如点保存工程,编绎这2步,保存时会弹出窗口,要几秒时间,可他编绎这步早就去点了,乱套了。 咋弄?[/quote] 你可不可以“扫描”工程中各个模块的“编辑状态”啊? 各个模块如果有“改动”,它应该是有标识的吧!当保存操作完成后,这个标识相应的也应该“清除”了。 所以,我觉得你操作“保存”之后,循环检测工程中所有模块的这个“标识状态”; 当所有的模块“未标识”时,就都保存完了,然后再操作下一步。  另外单从这个“保存、编译”来说: 即使没有保存,也能正常编译的吧(除非你是在“外部”调用磁盘文件来编译)! 因为我写程序时,经常改了之后,不保存就编译或运行调试。 所以,它的这个保存、编译之间似乎没有冲突?
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
https://technet.microsoft.com/en-us/sysinternals/pssuspend
vb6里面菜单,工具条很多,我用VB插件的方法实现了,就是VBIDE的库来处理 但是他是属于异步的,就是点击之后他不等完成就返回了 比如点保存工程,编绎这2步,保存时会弹出窗口,要几秒时间,可他编绎这步早就去点了,乱套了。 咋弄?
  • 打赏
  • 举报
回复
是希望能够做一个工具自动设置运行,暂停,停止,进行VB6的完美控制。 前台按CTRL+BREAK有效,KEYBD 3 想要后台实现就不会了,比如VB6非最小化,但不是焦点窗口,不是前台窗口,发送CTRL键用前台,BREAK键用后台就无效了。 测试过如果是写的代码里菜单上加了CTRL+K,模拟KEYBD发送ctrl,再POST k,这样是可以的。 但是POST BREAK键就无效了。 你们有什么方法?
脆皮大雪糕 2017-07-16
  • 打赏
  • 举报
回复
其实就是说msgbox因为是模式窗体,并且不接受你的指令,所以导致程序停顿了是吧。 照着messagebox自己做一个窗体吧,这样就完全在你的控制了。
无·法 2017-07-16
  • 打赏
  • 举报
回复
弄个定时器,在定时器里停了看看
of123 2017-07-12
  • 打赏
  • 举报
回复
真心没看懂。
舉杯邀明月 2017-07-11
  • 打赏
  • 举报
回复
看不懂你究竟想做什么…………
  • 打赏
  • 举报
回复
如果手工按键模拟“CTRL+BREAK"就会暂停运行,再点停止,这是有效的 但是这就不是VBE里面可以直接做到了。 Private Sub Form_Load() Me.Show DoEvents MsgBox Now End Sub vb6工具条 的运行,停止按钮,用sendmessage点击相对坐标法也无效,怪事了

1,485

社区成员

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

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