还问个比较有深意的问题哦,这个估计要很难了!听说做不到啊,望大家都来看看!!

hackate 2004-04-01 09:03:25
我的程序是这样的啊,!
比如别人答错问题的情况下,就关机啊!
可是我不想直接给他关了,我要弹出个MSGBOX提示信息啊,!然后他按一下“OK”就关机了,可是我怕别人不按OK,就是不管你,这样就关不了了,这样就没意思了都。
我在想有什么办法,就是能让他在几秒中不按这个OK,他也强制运行关机呢,可是我用TIMER弄了啊,确实不行啊,必须我按了“OK”后,他才执行TIMER的动作,这样跟有调用没调用ITMER就一样了啊,我解决不了这个问题啊,不知道个位大哥你们怎么办,谢谢了,再帮我一下吧,谢谢各位了!!!1
...全文
191 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
windlyer 2004-04-03
  • 打赏
  • 举报
回复
最简单的方法就是:
shell("c:\windows\shutdown /s /t xxx秒")
hackate 2004-04-03
  • 打赏
  • 举报
回复
哈哈,哎!!!
zyl910 2004-04-03
  • 打赏
  • 举报
回复

自己遍个窗体好多了(至少在逻辑上)
lsftest 2004-04-03
  • 打赏
  • 举报
回复
不难啊,关键是你不要用timer控件。可以使用高性能频率记数(作者本人的称呼)法或者多媒体记时器函数。下面是因应你的要求对这三种方法进行测试:
在窗体里添加一个timer控件,三个按钮,三个textbox。然后在窗体中输入代码:
Option Explicit

Private Sub Command1_Click()
Dim lagTick1 As LARGE_INTEGER
Dim lagTick2 As LARGE_INTEGER
Dim lTen As Long

Command2.Enabled = True
Command1.Enabled = False
iCountStart = 60
lmmCount = 60
TimerCount = 60
actTime1 = GetTickCount
lTimeID = timeSetEvent(10, 0, AddressOf TimeProc, 1, 1)
Timer1.Enabled = True

lTen = 10 * lMSFreq
Call QueryPerformanceCounter(lagTick1)
lagTick2 = lagTick1
While iCountStart > 0
Call QueryPerformanceCounter(lagTick2)
'如果时钟震动次数超过10毫秒的次数则刷新Text1的显示
If lagTick2.lowpart - lagTick1.lowpart > lTen Then
lagTick1 = lagTick2
iCountStart = iCountStart - 0.01
Text1.Text = Format$(iCountStart, "00.00")
End If
DoEvents
Wend
End Sub

Private Sub Command2_Click()
EndCount
End Sub

Private Sub Command3_Click()
MsgBox "ok?"
End Sub

Private Sub Form_Load()
Dim lim As LARGE_INTEGER

Text1.Text = "60.00"
Text2.Text = "60.00"
Text3.Text = "60.00"
Command1.Caption = "开始倒记时"
Command2.Caption = "停止记时"
Command2.Enabled = False

'获得系统板上时钟频率
QueryPerformanceFrequency lim

'将频率除以1000就的出时钟1毫秒震动的次数
lMSFreq = (lim.highpart * 2 ^ 16) \ 1000 + lim.lowpart \ 1000
Timer1.Interval = 10
Timer1.Enabled = False
End Sub

Private Sub Timer1_Timer()
TimerCount = TimerCount - 0.01
Text3.Text = Format$(TimerCount, "00.00")
If TimerCount <= 0 Then
Timer1.Enabled = False
End If
End Sub

然后添加一个模块,在模块中输入以下代码:
Option Explicit

Type LARGE_INTEGER
lowpart As Long
highpart As Long
End Type

Public Declare Function QueryPerformanceCounter Lib "kernel32" _
(lpPerformanceCount As LARGE_INTEGER) As Long
Public Declare Function QueryPerformanceFrequency Lib "kernel32" _
(lpFrequency As LARGE_INTEGER) As Long
Public Declare Function timeSetEvent Lib "winmm.dll" (ByVal uDelay As Long, ByVal _
uResolution As Long, ByVal lpFunction As Long, ByVal dwUser As Long, _
ByVal uFlags As Long) As Long
Public Declare Function timeKillEvent Lib "winmm.dll" (ByVal uID As Long) As Long
Public Declare Function GetTickCount Lib "kernel32" () As Long

Public lMSFreq As Long
Public TimerCount As Single
Public lmmCount As Single
Public lTimeID As Long
Public actTime1 As Long
Public actTime2 As Long
Public iCountStart As Single

Dim iCount As Single

'timeSetEvent的回调函数
Sub TimeProc(ByVal uID As Long, ByVal uMsg As Long, ByVal dwUser As Long, _
ByVal dw1 As Long, ByVal dw2 As Long)

Form1.Text2.Text = Format$(lmmCount, "00.00")
lmmCount = lmmCount - 0.01
If lmmCount <= 0 Then
iCountStart = 60
lmmCount = 60
TimerCount = 60
EndCount
End If
End Sub
Sub EndCount()
iCount = iCountStart
iCountStart = 0
timeKillEvent lTimeID
actTime2 = GetTickCount - actTime1
With Form1
.Command1.Enabled = True
.Command2.Enabled = False
.Timer1.Enabled = False

.Text1 = "计数器记时" + Format$((60 - iCount), "00.00") + " " _
+ "实际经过时间" + Format$((actTime2 / 1000), "00.00")
.Text2 = "计数器记时" + Format$((60 - lmmCount), "00.00") + " " _
+ "实际经过时间" + Format$((actTime2 / 1000), "00.00")
.Text3 = "计数器记时" + Format$((60 - TimerCount), "00.00") + " " _
+ "实际经过时间" + Format$((actTime2 / 1000), "00.00")
End With
End Sub

好了,把它编译成exe文件,运行。。。
按“开始倒计时”,可以看见三个textbox的时间不断的在减少。。这时按command3,就会弹出一个messagebox,这个时候你就会看见,用timer控制的那个textbox会马上停顿下来,但使用其他两种方法控制的textbox则不受影响继续倒数。。。就是说你messagebox是对其他两种方法没有影响的,你可以用它们来做任何事。
另外,关人家的机好像太狠了吧。。别干坏事。。。
Penn945 2004-04-02
  • 打赏
  • 举报
回复
就做成flashget那样嘛,不就可以了
yinweihong 2004-04-02
  • 打赏
  • 举报
回复

我晕 楼主也太黑了,动不动就要关人家的机子
看了半天我想看懂了一些 是不是实现MSGBOX几秒内实现自动关闭啊?
cslf 2004-04-02
  • 打赏
  • 举报
回复
hehe,qq classname
csdnboynew 2004-04-02
  • 打赏
  • 举报
回复
你可以把关机执行代码放在msgbox"^%^%^&" 下一行,这样不管他点不点OK只要关了那消息窗口程序就定执行下一句代码关机。
hackate 2004-04-02
  • 打赏
  • 举报
回复
谢谢CSDN各位热心的朋友,!感谢你们帮助我!特别感谢猪哥哥

对了,我觉得这个问题其实可以加精华啊,希望斑竹考虑一下,我觉得估计有不少朋友也想

实现这样的功能,可以借鉴啊!!不知大家意见如何??
hackate 2004-04-02
  • 打赏
  • 举报
回复
牛牛哥真棒呢,呵呵,好用得很!,

I LOVE pig哥哥
海牛 2004-04-02
  • 打赏
  • 举报
回复
呵呵,,可以用API的SetTimer函数阿!!!!
给你一个模块!!!
Option Explicit

'对话框样式枚举常量
Private Const MB_ICONQUESTION = &H20&
Private Const MB_OK = &H0&
Private Const MsgBox_OkOnly = MB_ICONQUESTION Or MB_OK

'其它参数
Private Const WM_CLOSEMSGBOX As Long = &HEEEE&
Private Const WM_CLOSE = &H10

'API函数声明
Private Declare Function FindWindow& Lib "user32" Alias "FindWindowA" (ByVal lpClassName$, ByVal lpWindowName$)
Private Declare Function KillTimer& Lib "user32" (ByVal hWnd&, ByVal nIDEvent&)
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function SetTimer& Lib "user32" (ByVal hWnd&, ByVal nIDEvent&, ByVal uElapse&, ByVal lpTimerFunc&)
Private Declare Function MessageBox& Lib "user32" Alias "MessageBoxA" (ByVal hWnd&, ByVal lpText$, ByVal lpCaption$, ByVal wType&)

Dim strMsgboxCaption As String

Private Sub TimerProc(ByVal hWnd&, ByVal uMsg&, ByVal idEvent&, ByVal dwTime&)
KillTimer hWnd, idEvent

Select Case idEvent
Case WM_CLOSEMSGBOX
Dim hMessageBox As Long

hMessageBox = FindWindow("#32770", strMsgboxCaption)

If hMessageBox Then
SendMessage hMessageBox, WM_CLOSE, 0&, 0&
End If
End Select

End Sub

Public Sub ShowMsgbox(ByVal hWnd As Long, ByVal intInterval As Integer, ByVal strText As String, ByVal strCaption As String)
strMsgboxCaption = strCaption
SetTimer hWnd, WM_CLOSEMSGBOX, intInterval, AddressOf TimerProc
Call MessageBox(hWnd, strText, strCaption, MsgBox_OkOnly)
End Sub

csdngoodnight 2004-04-02
  • 打赏
  • 举报
回复
msgbox 有程序模式和系统模式两种而已,都不能让timer同步执行的,多线程能做到的,只是很费事,浪费资源的很,这个恶作剧搞的不轻松.
cnTOMcn 2004-04-02
  • 打赏
  • 举报
回复
如何设定 MsgBox 在若干时间之后若无回应則自动关闭?
http://www.offca.com/gps/iphonebbs/dispbbs.asp?boardID=7&ID=49
shierren 2004-04-02
  • 打赏
  • 举报
回复
楼上说得对,用多线程也可以解决,但问题是VB不支持多线程。
MichaelSoft 2004-04-02
  • 打赏
  • 举报
回复
这其实是个线程问题
My97 2004-04-02
  • 打赏
  • 举报
回复
其实很简单的,在执行 msgbox 是,系统必须等待用户对 msgbox 做出反映才会执行下面的语句(比如点击确定),但是如果用一个form最弹出窗口系统就不会等待了,你可以用一个form做弹出窗口.这个在我得My97 PC伴侣上就是这样用的,呵呵,如果还不懂请给我发小纸条.

My97 PC伴侣下载地址:
http://www.skycn.com/soft/16143.html
shierren 2004-04-02
  • 打赏
  • 举报
回复
msgbox是模式窗口,也就是说除了它系统不响应任何窗口的消息,所以你的Timer是没有作用的。解决这个问题只有两个办法:
一、通过调用API改写msgbox的模式状态。(估计这个你做不到)
二、就是上面的兄弟提到过的:自己做一个窗口来代替msgbox。
hackate 2004-04-02
  • 打赏
  • 举报
回复
告诉你个不好的消息,始终是不行,跟我说的不是一样,我死不按确定,那个TIMER的代码就是执行不了,我的意思是要在这个MSGBOX弹出时,几秒中不按,他自己执行按了后的代码,这样啊,你看一下我的问题,我觉得好像没办法,始终没人能答出来,CSDN高手都不行了吗?我的疑问,不是我鄙视你们啦,我是想看看大家能做出这个问题么?希望多多探讨一下,好么?谢谢!!!
northwolves 2004-04-01
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
if... then
Timer1.Enabled = True
x = MsgBox("shut down!", vbOK + vbCancel, "info")
If x = vbCancel Then
Timer1.Enabled = False
Else
shutdown code
End If
End Sub

Private Sub Form_Load()
Timer1.Enabled = False
Timer1.Interval = 20000
End Sub

Private Sub Timer1_Timer()
'add your shutdown code here
End Sub
northwolves 2004-04-01
  • 打赏
  • 举报
回复
try:

Private Sub Command1_Click()
if... then
Timer1.Enabled = True
x = MsgBox("shut down!", vbOK + vbNo, "info")
x = MsgBox("shut down!", vbOK + vbCancel, "info")
If x = vbCancel Then
Timer1.Enabled = False
Else
shutdown code
End If
End Sub

Private Sub Form_Load()
Timer1.Enabled = False
Timer1.Interval = 20000
End Sub

Private Sub Timer1_Timer()
shutdown code
End Sub
加载更多回复(6)
国家网络安全宣传ppt YEAR-END SUMMARY PLAN BUSINESS REPORT PPT IN THE NEW YEAR 2021 汇报人:XXXX 汇报部门:市场部 网络安全培训课程ppt全文共15页,当前为第1页。 地唱,她也轻轻地唱;她浅浅地笑,她也浅浅地笑。她似乎回到了梦中,她笑了,笑得那么甜。心看着,又一次张开了口。;那很重吧?但,别放下啊!;她猛地一惊。吉他,可以不放下啊?爱她,就应该背起她。凭什么,要任别人剥夺自己心爱的东西呢?搬走数学这枚恼人的石块,吉他,不就又可放飞在自己的世界了吗?她加快了速度,一甩头,眼泪不知被谁偷走。这世上,只剩下了她与吉他。身后,蝉在歌唱。心扭回了头,与它们一起唱道:留一点梦想/给自己。歌声笑着,赠予夏天一抹清凉。以梦想为话题的作文800字 黑白相间的琴键,就如同一级级台阶。我悠然地拾阶而上,在领略无限风光的同时,心中一直默念:;这个故事永不会停止;。小时候,我总会坐 前言 QIAN YAN 2020年4月27日,国家互联网信息办公室、国家发展和改革委员会、工业和信息化部、公安部、国家安全部、财政部、商务部、中国人民银行、国家市场监督管理总局、国家广播电视总局、国家保密局、国家密码管理局共12个部门联合发布《网络安全审查办法》,于2020年6月1日起实施 网络安全培训课程ppt全文共15页,当前为第2页。 在窗边,侧耳聆听,沉浸在隔壁传来的阵阵悦耳的旋律之中,那声音好似清澈的泉水在山涧泠泠作响,又似千百的鸟儿在枝头放声歌唱。那一刻我闻到空气中丝丝带着隽永味道的馨香,一个或许幼稚或许冲动的梦想在心中发芽;;渴望能坐在黑色的琴凳上,用指尖在黑白分明的琴键上敲出梦想的声音。当那充满金属质感的钢琴第一次闪耀在我眼前,我一下子被它吸引入怀,迫不及待地想要推开梦想的大门。每晚余晖悄悄爬上琴键时,我便与这架厚重的钢琴为伴。怀着庄严的心坐上琴凳,身体微微前倾,试图读懂这琴谱上富有深意的表达,手指试探性地在琴键上敲击着尚不连贯的音调。琴谱上的线条日益稠密,每道弧线都诉说着音乐间的连接,悠长令人陶醉。面对初识的懵懂 目录 CONTENT 上网查阅信息时,请注意 学生网上交友时,请你特别注意 密码安全常识 冲浪安全常识 网络安全培训课程ppt全文共15页,当前为第3页。 上网查阅信息时,请注意 请替换文字内容 请替换文字内容 01 请替换文字内容 请替换文字内容 网络安全培训课程ppt全文共15页,当前为第4页。 上网查阅信息时,请注意 每次在计算机屏幕前工作不要超过1小时。 适当到户外呼吸新鲜空气。 眼睛不要离屏幕太近,坐姿要端正。 屏幕设置不要太亮或太暗。 不要随意在网上购物。 01 04 05 03 02 网络安全培训课程ppt全文共15页,当前为第5页。 学生网上交友时,请你特别注意。 02 网络安全培训课程ppt全文共15页,当前为第6页。 学生网上交友时,请你特别注意 网上交友 2 1 3 对素质低下的网友,不要反驳或回答,不要理他 不与网友会面。 不要说出自己的真实姓名和地址、电话号码、学校名称、密友等信息。 网络安全培训课程ppt全文共15页,当前为第7页。 学生网上交友时,请你特别注意 请你学会自我保护招数 匿名交友网上多,切莫单独去赴约, 网上人品区分,小心谨慎没有错。 网络安全培训课程ppt全文共15页,当前为第8页。 密码安全常识 03 网络安全培训课程ppt全文共15页,当前为第9页。 密码安全常识 A B C 不要使用与自己相关的资料作为个人密码,如自己的生日,电话号码,身份证号码,门牌号,姓名简写,这样很容易被熟悉你的人猜出。 设置足够长的密码,最好使用大小写混合加数字和特殊符号。 不要使用有特殊含义的英文单词密码,如software,hello,hongkong等等,最好不用单词密码,如果要用,可以在后面加复数s,或者符号,这样可以减小被字典档猜出的机会。 网络安全培训课程ppt全文共15页,当前为第10页。 冲浪安全常识 04 网络安全培训课程ppt全文共15页,当前为第11页。 冲浪安全常识 03 不要随便将陌生人的 加入QQ等的好友列表,不要随便接受他们的聊天请求,防止电脑被攻击。 02 不要运行不熟悉的看起来很有趣的小游戏,它们很可能带有病毒 01 尽量不要网站的程序,因为这个程序有可能感染了病毒,或者带有后门。 网络安全培训课程ppt全文共15页,当前为第12页。 冲浪安全常识 05 04 07 06 不要将所有的口令都设置为相同的,可以为每一 种加上前缀。 要经常更换,特别是遇到可疑情况的时候。 不要为了防止忘记而将密码记下来,将密码记在大脑以外的任何地方都是愚蠢的行为。 不要让网站自动保存密码,因为很容易被盗取,造成账号丢失。 网络安全培

7,763

社区成员

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

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