这个vb程序为何导致死机?

lfw 2000-07-05 10:37:00
这个vb程序为何导致死机?
程序的功能是每隔半分钟就运行一次webbrowser.exe(浏览一个网址),5秒钟后关闭浏览器,这个程序从8:00到17:00一直在运行,但运行六个小时后死机了?请问是什么原因?没有真正结束webbrowser.exe?


Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Dim num As Integer
Private Sub Form_Load()
Timer1.Interval = 5000
Timer1_Timer
End Sub

Private Sub Timer1_Timer()
Static sngOldTime As Single
Dim sngt As Single
sngt = Timer
If sngt >= 8 * 3600! Then



If sngt < 18 * 3600! Then

If Abs(sngt - sngOldTime) >= 30 Then

sngOldTime = sngt
num = num + 1
Label1.Caption = num
i = Shell("f:\webbrowser.exe", 1)
'执行webbrowser.exe这个程序
Sleep 5000
pausetask "webbrowser"
'关闭这个程序
End If

End If
End If




...全文
444 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
monday 2000-07-09
  • 打赏
  • 举报
回复
看看下面这个函数(instead of your closswin):

Sub KillTaskByExename (p$)
Dim hwnd%, lResult, fl%, i%

fl% = True

Do
' The desktop is the highest window
hwnd% = GetDesktopWindow()

' It's first child is the 1st top level window
hwnd% = GetWindow(hwnd%, GW_CHILD)

' Now load all top level windows
Do
If GetWindowExename$(hwnd%) = UCase$(p$) Then
lResult = SendMessage(hwnd%, WM_CLOSE, 0, 0&)
fl% = True
Else
fl% = False
End If
hwnd% = GetWindow(hwnd%, GW_HWNDNEXT)
Loop While hwnd% <> 0


Loop While fl%

End Sub
netufo 2000-07-08
  • 打赏
  • 举报
回复
timer1.enabled=false
sleep 5000
timer1.enabled=true
Tyro 2000-07-06
  • 打赏
  • 举报
回复
我想webbrowser.exe应该关闭了,否则也不会运行那么久
会不会是什么地方消耗了内存没有释放掉?
Tyro 2000-07-05
  • 打赏
  • 举报
回复
sorry,是我弄错了!试试PostMessage吧!
TopHead 2000-07-05
  • 打赏
  • 举报
回复
模块中的SendMessage改为PostMessage再试试!
Tyro 2000-07-05
  • 打赏
  • 举报
回复
跟踪一下会发现GetWindowText并没有取出窗口名,所以打开的程序都没有关闭呀!
Tyro 2000-07-05
  • 打赏
  • 举报
回复
pausetask是什么函数?没听说过也查不到,表面上看是指暂停这个程序呀!
是不是你不停的Shell并且每个都没有关闭导致的呀?
lfw 2000-07-05
  • 打赏
  • 举报
回复
其中用到的模块代码为
Option Explicit
Declare Function EnumWindows Lib "user32" (ByVal wndenmprc As Long, ByVal lParam As Long) As Long
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const WM_CLOSE = &H10
Private Target As String

Public Function closewin(ByVal app_hWnd As Long, ByVal param As Long) As Long
Dim buf As String * 256
Dim title As String
Dim length As Long

'取得窗口名句柄
length = GetWindowText(app_hWnd, buf, Len(buf))
title = Left$(buf, length)

'判断是否为要关闭的窗体
If InStr(title, Target) <> 0 Then
' 关闭窗体
SendMessage app_hWnd, WM_CLOSE, 0, 0
End If
closewin = 1
End Function

Public Sub pausetask(app_name As String)
Target = app_name
EnumWindows AddressOf closewin, 0
End Sub
Un1 2000-07-05
  • 打赏
  • 举报
回复
把webbrowser.exe作成ActiveX Exe加以控制。
lfw 2000-07-05
  • 打赏
  • 举报
回复
Tyro,
我和你一样有怀疑,这个函数pausetask就在上面,我也估计并没有真正关闭程序webbrowser.exe,但是把webbrowser.exe换成notepad.exe,确实发现notepad.exe关闭了窗口,我想问:关闭了notepade.exe窗口算不算结束了notepad.exe程序?应该算吧,那换成webbrowse.exe为何出现死机呢?各位看上面的pausetask函数,是否结束了一个程序呢?是暂停还是根本就结束了程序?
哪位大虾指点一下?
lfw 2000-07-05
  • 打赏
  • 举报
回复
但是用notepad.exe尝试,明显可以看到窗口关闭了。
还有,查看任务栏显这个vb.exe程序的确一直在运行,而webbrowser.exe的确一会儿启动,一会儿关闭了,这有作何解释呢?
Un1的意思我不太懂,把webbrowser.exe作为ActiveX exe控制有何好处?

7,759

社区成员

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

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