vb中如何实现自动点击 用msgbox时弹出的对话框中的确定或取消按钮?

laozhuang 2000-11-14 05:35:00
VB高手:

我想实现自动点击用VB msgbox 函数时弹出的对话框中的确定或取消按钮。
主要目的是;
当程序运行到一个设定时刻时,启动定时器,开始计时,同时调用msgbox函数
弹出对话框,当设定的计时时间超过规定的时间时,自动点击取消按钮,
使程序继续向下执行。
...全文
5619 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
laozhuang 2000-11-16
  • 打赏
  • 举报
回复
谢谢大家!!!现在总算可以了,我按照wxj_lake提供的网站中的方法去做,一切搞定!
由于我给的分数太只有50分,所以不够,请大家见谅!各分一点,不好意思。因为在另一个
贴子中我给出了100分的分数,大家可以上另一个贴子中去抢分!
laozhuang 2000-11-16
  • 打赏
  • 举报
回复
等我试可以了一定给大家加分!我正在试wxj_lake的方法!
laozhuang 2000-11-16
  • 打赏
  • 举报
回复
谢谢大家的热心帮助!
谢谢wxj_lake!
wxj_lake 2000-11-15
  • 打赏
  • 举报
回复
察看www.archtide.com
详细地址:
http://210.75.132.33/lakes/detail.asp?id=134

定制 MessageBox 的式样
laozhuang 2000-11-15
  • 打赏
  • 举报
回复
to shyguy:
怎么做?能给我例子吗?
shyguy 2000-11-15
  • 打赏
  • 举报
回复
你可以用api做一个定时显示的messageBox窗口
laozhuang 2000-11-15
  • 打赏
  • 举报
回复
首先感谢大家的支持与帮助,但没有回答我想要的实质问题。
我想把源程序给大家看,大家直接在我的程序中进行修改,好不好?

'模块中的代码
' =======================================================================

'声明必要的 API 例程:
Public Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As Long) As Long

Public Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long

Public Declare Function GetCursorPos Lib "user32" _
(lpPoint As POINTAPI) As Long

Public Declare Function SetCursorPos Lib "user32" _
(ByVal X As Long, ByVal Y As Long) As Long

Public Declare Function ClientToScreen Lib "user32" _
(ByVal hwnd As Long, lpPoint As POINTAPI) As Long

Public Declare Function GetTickCount Lib "c:\windows\system\kernel32.dll " () _
As Long

Public Declare Function GetLastActivePopup Lib "user32" _
(ByVal hwndOwnder As Long) As Long

Public Declare Function GetActiveWindow Lib "user32" () As Long

Public Declare Function GetDlgCtrlID Lib "user32" _
(ByVal hwnd As Long) As Long

Public Declare Function GetFocus Lib "user32" () As Long

Public Declare Function GetNextDlgGroupItem Lib "user32" _
(ByVal hDlg As Long, ByVal hCtl As Long, ByVal bPrevious As Long) As Long

Public Declare Function GetNextDlgTabItem Lib "user32" _
(ByVal hDlg As Long, ByVal hCtl As Long, ByVal bPrevious As Long) As Long


Public Const WM_USER = 1024
Public Const END_H10 = &H10

'/*********************************************************************/
Public Type POINTAPI
X As Long
Y As Long
End Type

Public Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONUP = &H202
Public ButtonPos As POINTAPI



'窗体中的代码
Dim l_Autoclick_Begin As Variant
Private Const EMPTY_TIME = "0:00:00"
Private Sub Command1_Click()
Dim lRt_msg As VbMsgBoxResult
l_Autoclick_Begin = EMPTY_TIME
l_Autoclick_Begin = Format(Now(), "yyyy-mm-dd hh:mm:ss")
Label2.Caption = l_Autoclick_Begin

'如果按下了按钮,则不再进行计时监测
Timer1.Enabled = True

'动态显示时间
Timer2.Enabled = True

DoEvents
'不知为何,在msgbox 对话框弹出的时候,label2上的时钟就不走了
'因为整个应用程序都被挂起来了,只有等msgbox 的按钮被按下后,应用程序才继续
'往下走-------这该如何解决呢????
lRt_msg = MsgBox("时间是否超过了设定时间?", vbOKCancel + vbExclamation + vbDefaultButton2, _
"警告信息")

'如果按下了按钮,则不再进行计时监测
Timer1.Enabled = False

'主要是为了得到返回值,根据返回值是vbok或vbcancel 进行相应处理
DoEvents
If lRt_msg = vbOK Then
MsgBox "进行处理!"
Else
If lRt_msg = vbCancel Then
MsgBox "取消处理!"
End If
End If
End Sub

Private Sub Form_Load()

Dim tmp As Long

With Command1
ButtonPos.X = (.Left + .Width / 2) / Screen.TwipsPerPixelX
ButtonPos.Y = (.Top + .Height / 2) / Screen.TwipsPerPixelY
End With
tmp = ClientToScreen(Me.hwnd, ButtonPos)
Label4.Caption = Format(Now, "yyyy-mm-dd hh:mm:ss")
End Sub
Private Sub mnuClickButton_Click()
'以下是对已知窗体和已知按钮控件的句柄进行自动电击
Const MoveStep As Integer = 50
Dim CursorPos As POINTAPI
Dim DistX As Double, DistY As Double
Dim tmp As Long
Dim i As Integer
Dim PosX As Integer, PosY As Integer
Dim TickCount As Long
tmp = GetCursorPos(CursorPos)
DistX = ButtonPos.X - CursorPos.X
DistY = ButtonPos.Y - CursorPos.Y
For i = 1 To MoveStep
PosX = CursorPos.X + DistX * i / MoveStep
PosY = CursorPos.Y + DistY * i / MoveStep
tmp = SetCursorPos(PosX, PosY)
Next i
tmp = SendMessage(Command1.hwnd, WM_LBUTTONDOWN, 0, 0)
TickCount = GetTickCount()
While GetTickCount() - TickCount < 200
tmp = DoEvents()
Wend
tmp = SendMessage(Command1.hwnd, WM_LBUTTONUP, 0, 0)
End Sub

'/*********************************************************************/

Private Sub Timer1_Timer()
Const MoveStep As Integer = 50
Dim lhwnd As Long
Dim lhwnd2 As Long
Dim tmp As Long
Dim TickCount As Long
Dim CursorPos As POINTAPI
Dim DistX As Double, DistY As Double
Dim i As Integer
Dim PosX As Integer, PosY As Integer


Timer1.Enabled = False

If (Abs(DateDiff("s", l_Autoclick_Begin, Now()) > 60)) Then

'下面这一句是为了得到msgbox对话框的句柄
lhwnd = GetActiveWindow()
'lhwnd = GetLastActivePopup(0)
'下面这一句是为了得到msgbox对话框中默认的vbcancel按钮的句柄
lhwnd2 = GetFocus()

'获得msgbox对话框中的取消按钮在屏幕中的位置????怎么获得???
'以下好象是错的
' ButtonPos.X = (lhwnd2.Left + lhwnd2.Width / 2) / Screen.TwipsPerPixelX
' ButtonPos.Y = (lhwnd2.Top + lhwnd2.Height / 2) / Screen.TwipsPerPixelY
' tmp = ClientToScreen(lhwnd, ButtonPos)

'鼠标移动到msgbox对话框中的取消按钮在屏幕中的位置
' tmp = GetCursorPos(CursorPos)
' DistX = ButtonPos.X - CursorPos.X
' DistY = ButtonPos.Y - CursorPos.Y
' For i = 1 To MoveStep
' PosX = CursorPos.X + DistX * i / MoveStep
' PosY = CursorPos.Y + DistY * i / MoveStep
' tmp = SetCursorPos(PosX, PosY)
' Next i

'下面这一句发送鼠标左键按下命令down
tmp = SendMessage(lhwnd2, WM_LBUTTONDOWN, 0, 0)
TickCount = GetTickCount()
While GetTickCount() - TickCount < 200
tmp = DoEvents()
Wend
'下面这一句发送鼠标左键弹起命令up
tmp = SendMessage(lhwnd2, WM_LBUTTONUP, 0, 0)

End If
End Sub

Private Sub Timer2_Timer()
Label4.Caption = Format(Now, "yyyy-mm-dd hh:mm:ss")
End Sub
laozhuang 2000-11-15
  • 打赏
  • 举报
回复
首先感谢大家的支持与帮助,但没有回答我想要的实质问题。
我想把源程序给大家看,大家直接在我的工程中进行修改,好不好?
请把email:给我,我发给你们!
To happyherro:
你误解了我的意思。
To wxj_lake:
我也知道用这两个函数,先获得msgbox对话框的句柄,再用SendMessage发送关闭命令.
但是,如何获得按钮的句柄?请给我一个程序例子,好吗?先谢谢了!!!
请给我发email:fj9lihu@sina.com
To Nicrosoft :
能给我发一个例子吗?谢谢!!!
请给我发email:fj9lihu@sina.com


prefix 2000-11-15
  • 打赏
  • 举报
回复
当msgbox弹出是timer不走这时正常的,如果你form.show 1 弹出了个窗口也会这样,因为在同个线程中会中止等待msgbox完毕。
Nicrosoft 2000-11-15
  • 打赏
  • 举报
回复
VB自含的SendKeys函数可以发送模拟键盘按键。

小弟做的Sunny FreeWizard解除弹出对话框类共享软件限制的时候就是这样实现的。
Nicrosoft 2000-11-15
  • 打赏
  • 举报
回复
你可以查查MSDN啊,里面有SendKeys函数的用法的
Wonny 2000-11-14
  • 打赏
  • 举报
回复
自己做一个对话框不行吗?一样可以加上确定和取消按钮。
wxj_lake 2000-11-14
  • 打赏
  • 举报
回复
查找
FindWindow
SendMessage
两个API的用法
happyherro 2000-11-14
  • 打赏
  • 举报
回复
基本过程如下:
private Timer1.timer()
if Time()<TimeYouWant then
msgbox(.....)'调用MSGBOX函数,其参数设置为具有“确定”及“取消”两个按钮。
else
msgbox(....)'参数设置为只用取消按钮。
end if
end sub
文名: VB程序设计及应用 作者: 李淑华图书分类: 软件 资源格式: PDF 版本: 文字版 版社: 高等教育版社书号: 7-04-014767-X发行时间: 2004年04月 地区: 大陆 语言: 简体文 简介: 内容简介: 本书是新世纪高职高专教改项目成果教材,由教育部高职高专教育专业教学改革试点院校编写。全书共分 17 章。主要介绍了 VisualBasic6.0 系统的基础知识,程序设计的常用函数、程序设计语句、数组,简单介绍了面向对象程序设计的基本概念,详细介绍了基本控件、对话框、图形、菜单等设计方法,多文档界面、工具栏、状态栏的程序设计方法,数据库、对象的链接和嵌入、多媒体控件以及常用的 ActiveX 控件的应用,最后介绍了打字练习、画板、学生成绩管理系统等应用程序实例。本书配有大量的实例和测试题,并配有 CAI课件、电子教案。本书由浅入深、通俗易懂,适用于高等职业学校、高等专科学校、成人高校、示范性软件职业技术学院、本科院校使用,还适用于本科院校举办的二级职业技术学院、教育学院以及民办高校使用,也可供参加全国高等学校计算机考试二级 VisualBasic语言程序设计的考生学习参考,同时也适应各类工作人员学习参考。 内容截图: 目录: 第1章 VisualBasic概述 1.1 VisualBasic6.0 1.1.1 VB的发展 1.1.2 VB6.0版本简介 1.1.3 VB的特点 1.2 VB的集成开发环境 1.2.1 启动 VB集成开发环境 1.2.2 用户界面 1.3 各种窗口简介 1.3.1 窗体窗口 1.3.2 工程资源管理器窗口 1.3.3 工具箱窗口 1.3.4 属性窗口 1.3.5 代码窗口 1.3.6 调色板窗口 1.3.7 窗体布局窗口 1.3.8 立即窗口 1.3.9 对象浏览器窗口 习题9 第2章 VB基本概念与操作 2.1 可视化编程基础 2.2 VB应用程序的开发步骤 2.2.1 创建或打开新工程 2.2.2 建立用户界面 2.2.3 设计用户界面 2.2.4 添加程序代码 2.2.5 运行调试程序 2.2.6 保存文件 2.2.7 生成可执行文件 2.3 修改和定制窗体 2.3.1 选择控件 2.3.2 控件的操作 2.4 工程的管理 2.4.1 工程的组成 2.4.2 习题 第 3章 VB程序设计的基础 3.1 命名规则和语法规则 3.1.1 命名规则 3.1.2 语句及语法规则 3.2 数据类型 3.2.1 基本数据类型 3.2.2 用户自定义类型 3.3 常量与变量 3.3.1 常量 3.3.2 变量 3.3.3 变量的作用域 3.3.4 变量作用域的关系 3.4 常用函数 3.4.1 内部函数 3.4.2 字符串函数 3.5 运算符和表达式 3.5.1 算术运算符与算术表达式 3.5.2 关系运算符与关系表达式 3.5.3 逻辑运算符与逻辑表达式 习题 第 4章 数据的输与输入 4.1 数据的输 4.1.1 Print方法 4.1.2 与 Print有关的函数 4.1.3 Cls方法 4.2 数据输入函数 InputBox 4.3 MsgBox函数和 MsgBox语句 4.3.1 MsgBox函数 4.3.2 MsgBox语句 实训 习题 第 5章 VB程序设计语句 5.1 赋值语句 5.2 条件语句 5.2.1 分支结构 5.2.2 情况语句 5.3 循环语句 5.3.1 For循环 5.3.2 Do循环 5.3.3 多重循环 5.3.4 GoTo语句 5.3.5 End语句 5.3.6 应用举例 习题一 5.4 数组 5.4.1 数组的概念 5.4.2 静态数组的定义 5.4.3 数组下标界的测试函数 5.4.4 动态数组的定义 5.4.5 数组的清除和重新定义 5.4.6 数组的基本操作 5.4.7 数组应用举例 5.5 控件数组 5.5.1 控件数组的概念 5.5.2 控件数组的建立 习题二 5.6 过程 5.6.1 过程的定义 5.6.2 过程的调用 5.6.3 退过程 5.6.4 SubMain过程 5.7 函数 5.7.1 函数的定义 5.7.2 函数的调用 5.7.3 退函数语句 实训 习题三 第6章 窗体 6.1 对象的基本属性 6.1.1 属性的分类 6.1.2 对象的基本属性 6.2 窗体的属性、事件和方法 6.2.1 窗体的常用属性 6.2.2 窗体的常用事件 6.2.3 窗体的常用方法 6.2.4 控件的常用事件 6.2.5 LoadPicture函数 6.3 多窗体 6.3.1 加载窗体 6.3.2 显示窗体 6.3.3 隐藏窗体 6.3.4 卸载窗体 6.3.5 建立多窗体 6.4 鼠标事件与键盘事件 6.4.1 鼠标事件 6.4.2 键盘事件 实训 习题 第 7章 常用控件的使用 7.1 标签框与文本框 7.1.1 标签框 7.1.2 文本框 7.2 命令按钮与计时器 7.2.1 命令按钮 7.2.2 计时器 7.3 单选按钮与复选框 7.3.1 单选按钮 7.3.2 复选框 7.4 框架与滚动条 7.4.1 框架 7.4.2 滚动条 7.5 列表框与组合框 7.5.1 列表框 7.5.2 组合框 7.6 图片框与图像框 7.6.1 图片框 7.6.2 图像框 7.7 设计简单的动画 实训 习题 第 8章 对话框程序设计 8.1 概述 8.1.1 对话框的分类 8.1.2 对话框的特点 8.2 通用对话框 8.2.1 通用对话框控件 8.2.2 通用对话框的属性与方 8.3 通用对话框的使用 8.3.1 打开(Open)对话框 8.3.2 另存为(SaveAs)对话框 8.3.3 颜色(Color)对话框 8.3.4 字体(Font)对话框 8.3.5 打印(Printer)对话框 8.3.6 帮助(Help)对话框 8.4 自定义对话框 8.4.1 自定义对话框的外观 8.4.2 自定义对话框的规则 实训 习题 第9章 图形操作 9.1 图形操作基础 9.1.1 标准坐标系统 9.1.2 自行定义坐标系 9.2 绘图属性 9.2.1 当前坐标 9.2.2 线宽 9.2.3 线型样式 9.2.4 填充 9.2.5 颜色函数 9.3 图形控件1 9.3.1 直线控件 9.3.2 形状控件 9.4 图形方法 9.4.1 PSet方法 9.4.2 Line方法 9.4.3 Circle方法 9.5 画图应用 实训 第10章 菜单程序设计 10.1 概述 10.1.1 下拉菜单 10.1.2 弹式菜单 10.1.3 设计菜单的步骤 0.1.4 菜单编辑器 10.2 下拉菜单的设计 10.3 菜单项的控制 10.3.1 有效性控制 10.3.2 菜单项标记 10.3.3 菜单项的增减 10.4 弹式菜单 实训 习题 第 11章 文件 11.1 文件系统控件 11.1.1 驱动器列表框 11.1.2 目录列表框 11.1.3 文件列表框 11.2 文件基本操作 11.3 文件概述 11.3.1 文件结构 11.3.2 文件分类 11.3.3 文件的打开与关闭 11.3.4 文件操作语句和函数 11.4 顺序文件 11.4.1 顺序文件的写操作 11.4.2 顺序文件的读操作 11.5 随机文件 11.5.1 随机文件的打开与关闭 11.5.2 随机文件的写操作 11.5.3 随机文件的读操作 实训 习题 第 12章 界面设计 12.1 多文档界面 12.1.1 多文档界面的特性 12.1.2 创建和设计 MDI窗体 12.1.3 创建和设计 MDI子窗体 12.1.4 MDI窗体与子窗体的交互 12.1.5 MDI应用程序的菜单 12.1.6 应用 MDI窗体注意事项 12.2 图像列表框、工具栏和状态栏 12.2.1 图像列表框 12.2.2 工具栏 12.2.3 状态栏 12.3 高级文本框控件 12.4 应用程序向导 12.4.1 生成多文档编辑器 12.4.2 生成WWW浏览器 12.4.3 生成资源管理器 实训 第13章 VisualBasic与数据库 13.1 数据库概念 13.2 数据库管理器 13.3 数据控件 13.3.1 数据控件属性 13.3.2 数据网格控件 13.3.3 数据控件的事件 13.3.4 数据控件的常用方法 13.3.5 记录集的属性与方法 13.3.6 数据库记录的增删改操作 13.4 结构化查询语言(SQL) 13.4.1 SQL的常用命令 13.4.2 Select语句格式与功能 13.4.3 使用SQL 13.5 ADO数据控件 13.5.1 ADO对象模型 13.5.2 ADO控件的常用属性 13.5.3 ADO控件连接数据库 13.5.4 ADO控件上新增绑定控件 13.5.5 数据窗体向导 实训 第14章 对象的链接与嵌入 14.1 OLE控件概述 14.1.1 使用OLE控件 14.1.2 对象链接与嵌入的区别 14.2 OLE控件常用属性与方法 14.2.1 OLE控件的属性 14.2.2 编辑OLE对象 实训 第15章 多媒体 15.1 多媒体控件 15.1.1 多媒体控件的常用属性 15.1.2 多媒体控件的常用事件 15.2 多媒体控件的使用 15.2.1 利用多媒体控件播放CD 15.2.2 利用多媒体控件播放VCD 15.2.3 利用多媒体控件播放有声的 AVI文件 实训 第 16章 常用 ActiveX控件应用 16.1 滑块控件 16.2 日历控件 16.2.1 日历控件的常用属性 16.2.2 日历控件的常用方法 16.3 动画控件 16.3.1 动画控件的常用属性 16.3.2 动画控件的常用方法 16.4 进程条控件 16.4.1 进程条控件的常用属性 16.4.2 进程条控件的常用事件 16.5 浏览器控件 16.5.1 浏览器控件的常用属性 16.5.2 浏览器控件的常用方法 16.6 多选项卡控件 16.6.1 多选项卡控件的常用属性 16.6.2 多选项卡控件的常用事件 16.7 综合应用 16.7.1 状态栏控件和形状控件 16.7.2 多媒体控件和滑块控件 实训 第 17章 综合应用 17.1 打字系统的设计 17.1.1 打字系统的主要功能 17.1.2 打字系统的程序设计 17.2 画板系统的设计 17.2.1 画板系统的主要功能 17.2.2 画板系统的程序设计 17.3 学生档案管理系统的设计 17.3.1 系统结构图 17.3.2 数据库的建立 17.3.3 主窗体的设计 实训 参考文献

7,762

社区成员

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

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