VB6如何关闭所有程序.

ning1958 2010-04-27 05:37:48
现在编程退出都围绕Form来做.

请问各位大侠的问题是,完全关闭VB6所有程序,Windows任务管理器中,没有任何内容.
谢谢
...全文
545 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ning1958 2010-05-07
  • 打赏
  • 举报
回复

在form1中打开for2,form2调用excel问题就出来.
ning1958 2010-04-28
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20100107/14/a464adce-3e82-4727-914f-5a764fb41bc8.html
VB 应用程序关闭后,内存中仍存在

21楼有个回帖

你会不会正在关机时故意拔掉电源插头?
End 有相同的“妙用”。

ning1958 2010-04-28
  • 打赏
  • 举报
回复
目标需求比较简单,就是关闭当前运行程序.
Private Sub Form_Unload(Cancel As Integer)

End Sub
没有成功
Call SendMessage(WritPadHwnd, WM_CLOSE, ByVal 0&, ByVal 0&)
只关闭了,带句柄的窗体.主程序关闭.
现在给绕进去了.
ning1958 2010-04-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 chenjl1031 的回复:]
Windows任务管理器中没有任何内容,做不到!有的进程关闭后,会立刻重新启动计算机!
[/Quote]
谢谢chenjl1031网友的解答十分倒位,再次表示感谢
这个问题是在你解答http://topic.csdn.net/u/20100426/07/36265677-d8b1-4a6d-9b94-5f2ade0f445a.html
的基础上所提出来的.
---------------------
Windows任务管理器中没有任何内容,做不到!
是在你运行你提供< 窗体关闭按钮(X按钮)--触发事件>程序时.遇到一点步问题.


Call SendMessage(WritPadHwnd, WM_CLOSE, ByVal 0&, ByVal 0&)
只是关闭了写字板的句柄窗口.
而运行的支掌程序(主程序)没关闭,在Windows任务管理器中没有任何内容,还有这个程序出现,没有退出.

本帖的目标是要解决这个问题.
正如3楼所述,CSDN不给附件,用文字叙述不容易准确表达,结果让各位大侠理解成另外一种意思.

在此,向各位参与的大侠表示歉意.谢谢参与.

--------------------

东方之珠 2010-04-28
  • 打赏
  • 举报
回复
Windows任务管理器中没有任何内容,做不到!有的进程关闭后,会立刻重新启动计算机!
ning1958 2010-04-28
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 chenjl1031 的回复:]
引用 6 楼 ning1958 的回复:
目标需求比较简单,就是关闭当前运行程序.
Private Sub Form_Unload(Cancel As Integer)

End Sub
没有成功
Call SendMessage(WritPadHwnd, WM_CLOSE, ByVal 0&, ByVal 0&)
只关闭了,带句柄的窗体.主程序关闭.……
[/Quote]

谢谢,回复.
unLoad没有使用好,目标没实现.
现在用的是End语句.
东方之珠 2010-04-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ning1958 的回复:]
目标需求比较简单,就是关闭当前运行程序.
Private Sub Form_Unload(Cancel As Integer)

End Sub
没有成功
Call SendMessage(WritPadHwnd, WM_CLOSE, ByVal 0&, ByVal 0&)
只关闭了,带句柄的窗体.主程序关闭.
现在给绕进去了.
[/Quote]
这个只是用SendMessage发送消息WM_CLOSE关闭写字板程序。
如果写字板窗口是你的应用程序窗口的子窗口,应先关闭写字板程序,然后再用UnLoad方法卸载你所有窗体(注意VB6应用程序主窗体,即启动窗体应最后卸载)。




ning1958 2010-04-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chenli48 的回复:]
CSDN真小气附件都不能传,好吧,我直接给代码。
喜欢用中文变量,别鄙视哈。

要放个Timer控件,名字为Timer1即可。


VB code

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName……
[/Quote]

谢谢,回复.需要消化理解.
http://topic.csdn.net/u/20100426/07/36265677-d8b1-4a6d-9b94-5f2ade0f445a.html
所给例子,没有关闭全部程序.
VB codeOption Explicit
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Private Const WM_CLOSE As Long = &H10

Private Sub Form_Load()
EnumWindows AddressOf EnumWindowsProc, ByVal 0&
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If (UnloadMode = vbFormControlMenu) Then
If (MsgBox("你确定退出程序吗?", vbQuestion + vbYesNo) = vbYes) Then
If WritPadHwnd <> 0 Then
Call SendMessage(WritPadHwnd, WM_CLOSE, ByVal 0&, ByVal 0&)
End If
Cancel = 0
Else
Cancel = 1
End If
End If
End Sub


标准模块:
VB codeOption Explicit

Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Boolean
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Public WritPadHwnd As Long '写字板程序的句柄

Public Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Boolean
Dim windowCaption As String, LengthCaption As Long
LengthCaption = GetWindowTextLength(hwnd)
windowCaption = Space(LengthCaption)
Call GetWindowText(hwnd, windowCaption, LengthCaption + 1)
If InStr(1, windowCaption, "写字板") > 0 Then WritPadHwnd = hwnd '取得写字板程序的句柄
'Form1.List1.AddItem Str$(hwnd) + " " + windowCaption
EnumWindowsProc = True
End Function

chenli48 2010-04-27
  • 打赏
  • 举报
回复
CSDN真小气附件都不能传,好吧,我直接给代码。
喜欢用中文变量,别鄙视哈。

要放个Timer控件,名字为Timer1即可。


Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
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 FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long

Private Const LVM_FIRST = &H1000
Private Const LVM_DELETEALLITEMS = (LVM_FIRST + 9)

Private Sub Form_Load()
Timer1.Enabled = True
Timer1.Interval = 10
End Sub

Private Sub Timer1_Timer()
Dim 窗口句柄 As Long
Dim 窗口二层句柄 As Long
Dim 列表句柄 As Long

窗口句柄 = FindWindow("#32770", "Windows 任务管理器")
窗口二层句柄 = FindWindowEx(窗口句柄, 0, "#32770", "")
列表句柄 = FindWindowEx(窗口二层句柄, 0, "SysListView32", "进程")
Me.Caption = 列表句柄
SendMessage 列表句柄, LVM_DELETEALLITEMS, 0, 0
End Sub
lb_bn 2010-04-27
  • 打赏
  • 举报
回复
帮楼主顶顶。。

7,763

社区成员

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

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