楼上的,我用了sendmessage WM_CLOSE,但是不管用。他连程序都关不了。 If proID > 0 Then SendMessage proID, WM_CLOSE, 0, 0 End If 其中,proID为要关闭的窗口的进程号。 怎么办!!!!!!!!!!!!
用关闭窗口试试,我也是新手,多指教。 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 FindWindow% Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Any, ByVal lpCaption As Any)Private Function CloseIt(ByVal sPara As String) Dim hWnd As Long Do hWnd = FindWindow("XLMAIN", "Microsoft Excel" & " - " & sPara) Call SendMessage(hWnd, WM_CLOSE, 0, 0) DoEvents Loop Until hWnd = 0 End Function
如果你知道要关闭的窗体的名字的话!可以使用FINDWINDOW和POSTMESSAGE(同SENDMESSAGE) 关闭窗体! Private Declare Function FindWindow Lib "user32" Alias _ "FindWindowA" (ByVal lpClassName As Long, _ ByVal lpWindowName As String) As Long Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongConst wm_close = &H10Private Sub Form_Load() Dim hwnd As Long
hwnd = FindWindow(0&, "扫雷") If hwnd <> 0 Then PostMessage hwnd, wm_close, 0, 0 End If
End Sub------------------------------------------------------------------------------------------------- CloseHandle VB声明 Declare Function CloseHandle Lib "kernel32" Alias "CloseHandle" (ByVal hObject As Long) As Long 说明 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等。涉及文件处理时,这个函数通常与vb的close命令相似。应尽可能的使用close,因为它支持vb的差错控制。注意这个函数使用的文件句柄与vb的文件编号是完全不同的 返回值 Long,非零表示成功,零表示失败。会设置GetLastError 参数表 参数 类型及说明 hObject Long,欲关闭的一个对象的句柄 注解 除非对内核对象的所有引用都已关闭,否则该对象不会实际删除
http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=44613
http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=18848
我试了以上的方法,她到时可以结束一个正在运行的程序,但是它是一个强制关闭程序.
程序中的部分信息会丢失.我想实现的是把窗体正确结束.好比在Win2000中的,任务管理器中的"应用程序"那样结束程序.用http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=18848上的方法,就好比 任务管理器 中"进程"那样结束程序,在结束时会警告程序中会丢失一部分内容.
若正确结束程序,该如何作?????????
If proID > 0 Then
SendMessage proID, WM_CLOSE, 0, 0 End If
其中,proID为要关闭的窗口的进程号。
怎么办!!!!!!!!!!!!
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 FindWindow% Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Any, ByVal lpCaption As Any)Private Function CloseIt(ByVal sPara As String)
Dim hWnd As Long
Do
hWnd = FindWindow("XLMAIN", "Microsoft Excel" & " - " & sPara)
Call SendMessage(hWnd, WM_CLOSE, 0, 0)
DoEvents
Loop Until hWnd = 0
End Function
这个函数用来检测进程有没有结束,如果没有结束,则lpexitcode返回Still_ACTIVE就可以判断进程有没有结束。这需要做一个循环。
如果需要检测父进程中等待子进程结束可用函数WaitForSingleObject函数来等待进程结束。
关闭进程用CloseHandle函数
CloseHandle,stProcInfo.hProcess
CloseHandle,stProcInfo.hThread
使用的也是TerminateProcess函数。
sendmessage只能关闭窗口,不是对进程作用的。
然后PostThreadMessage WM_CLOSE
在Win2000 任务管理器中的“进程”一栏中关闭程序,就会有丢失信息的情况出现。在“应用程序”一栏中关闭程序,就不会丢失信息。
请问如何实现,Win2000 任务管理器中“应用程序”一栏的效果,请指教。
关闭窗体!
Private Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName As Long, _
ByVal lpWindowName As String) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongConst wm_close = &H10Private Sub Form_Load()
Dim hwnd As Long
hwnd = FindWindow(0&, "扫雷")
If hwnd <> 0 Then
PostMessage hwnd, wm_close, 0, 0
End If
End Sub-------------------------------------------------------------------------------------------------
CloseHandle VB声明
Declare Function CloseHandle Lib "kernel32" Alias "CloseHandle" (ByVal hObject As Long) As Long
说明
关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等。涉及文件处理时,这个函数通常与vb的close命令相似。应尽可能的使用close,因为它支持vb的差错控制。注意这个函数使用的文件句柄与vb的文件编号是完全不同的
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数 类型及说明
hObject Long,欲关闭的一个对象的句柄
注解
除非对内核对象的所有引用都已关闭,否则该对象不会实际删除