AW: ext. Programm schließen
03.09.2013 20:42:01
Nepumk
Hallo,
aber nicht mit der WScrip.Shell. Ich frag mich wieso du das benutzt, wenn es in Excel doch die Shell-Funktion gibt.
Beispiel:
Option Explicit
Private Declare Function GetParent Lib "user32.dll" ( _
ByVal hwnd As Long) As Long
Private Declare Function GetWindow Lib "user32.dll" ( _
ByVal hwnd As Long, _
ByVal wCmd As Long) As Long
Private Declare Function FindWindowA Lib "user32.dll" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32.dll" ( _
ByVal hwnd As Long, _
ByRef lpdwprocessid As Long) As Long
Private Declare Function PostMessageA Lib "user32.dll" ( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Private Const GW_HWNDNEXT As Long = 2
Private Const WM_CLOSE As Long = &H10
Public Sub Test()
Dim lngProcessId As Long, lngHwnd As Long
lngProcessId = Shell("C:\Windows\system32\notepad.exe", vbNormalFocus)
'mach was
lngHwnd = GetWindowHandle(lngProcessId)
If lngHwnd <> 0 Then Call PostMessageA(lngHwnd, WM_CLOSE, 0&, 0&)
End Sub
Private Function GetWindowHandle(ByVal pvlngProcessId As Long) As Long
Dim lngHwnd As Long, lngProcessId As Long
lngHwnd = FindWindowA(vbNullString, vbNullString)
Do Until lngHwnd = 0
If GetParent(lngHwnd) = 0 Then
Call GetWindowThreadProcessId(lngHwnd, lngProcessId)
If pvlngProcessId = lngProcessId Then
GetWindowHandle = lngHwnd
Exit Do
End If
End If
lngHwnd = GetWindow(lngHwnd, GW_HWNDNEXT)
Loop
End Function
Gruß
Nepumuk