Is it possible to close another application from a VB program if it is not shelled?
Printable View
Is it possible to close another application from a VB program if it is not shelled?
Certainly is, provided you know the window caption
VB Code:
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 String, ByVal lpWindowName As String) As Long Const WM_CLOSE = &H10 Private Sub Command1_Click() Dim intHwnd As Long intHwnd = FindWindow(vbNullString, "Calculator") ' Must match the caption of the window exactly SendMessage intHwnd, WM_CLOSE, 0&, 0& End Sub
Thanks alot!
Can you get the exact name of running tasks from VB?
This code will fill a listbox with the caption of each open "window". This includes all programs in the task bar and any windows within those programs
In a Module
VB Code:
Private Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) 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 IsWindowVisible Lib "user32" (ByVal hwnd As Long) As Long Private Const WM_GETTEXT = &HD Private aCaptions() As String Private lCount As Long Public Function GetAllCaptions() As Variant lCount = 0 Call EnumWindows(AddressOf EnumWindowsProc, 0&) If lCount Then ReDim Preserve aCaptions(lCount - 1) GetAllCaptions = IIf(lCount, aCaptions, Array()) End Function Private Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Long Dim sBuffer As String * 260 If IsWindowVisible(hwnd) Then ReDim Preserve aCaptions(lCount) aCaptions(lCount) = Left(sBuffer, SendMessage(hwnd, WM_GETTEXT, 260, ByVal sBuffer)) If Len(Trim(aCaptions(lCount))) Then lCount = lCount + 1 End If EnumWindowsProc = hwnd End Function
In a form (with a List1 and a Command1)
VB Code:
Private Sub Command1_Click() Dim vCaps As Variant Dim lIndex As Long vCaps = GetAllCaptions() List1.Clear For lIndex = 0 To UBound(vCaps) List1.AddItem vCaps(lIndex) Next End Sub
That's an even bigger help:D
Thanks!Quote:
Originally posted by chrisjk
This code will fill a listbox with the caption of each open "window". This includes all programs in the task bar and any windows within those
I have a strong suspicion this won't work on Windows NT. Anyone know for sure ?Code: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 String, ByVal lpWindowName As String) As Long
Const WM_CLOSE = &H10
Private Sub Command1_Click()
Dim intHwnd As Long
intHwnd = FindWindow(vbNullString, "Calculator") ' Must match the caption of the window exactly
SendMessage intHwnd, WM_CLOSE, 0&, 0&
End Sub
I built it using 2k
I'll try it at work tomorrow and let you know.
yeah, thanks. NT and 2K are similar, but you never know with MS ;)
I looked at it and I can see no reason why it wouldn't work on WinNT. It should work with no problem.Quote:
Originally posted by tcurrier
I have a strong suspicion this won't work on Windows NT. Anyone know for sure ?
Sorry guys! False alarm! It works fine on Windows NT 4.0 !!!
How about 98/me?Quote:
Originally posted by tcurrier
I have a strong suspicion this won't work on Windows NT. Anyone know for sure ?
98 has no problems with that code
Hey chrisjk,
what do u mean by you built it, how do build stuff like that and how do u know which functions to call?