Thursday, October 28, 2010

In VB Coding - how can I get rid of the processes that still are running in the background?

When I call another program from a VB Code after I close it properly in the VB project (set xx = nothing) the processes are still running in the background. What command line can I write to also kill those processes without having to close the calling program?In VB Coding - how can I get rid of the processes that still are running in the background?
Private Declare Function FindWindow Lib ';user32'; Alias ';FindWindowA'; (ByVal lpClassName As Long, ByVal lpWindowName As Long) As Long

Private Declare Function GetParent Lib ';user32'; (ByVal hwnd As Long) As Long

Private Declare Function SetParent Lib ';user32'; (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

Private Declare Function GetWindowThreadProcessId Lib ';user32'; (ByVal hwnd As Long, lpdwProcessId As Long) As Long

Private Declare Function GetWindow Lib ';user32'; (ByVal hwnd As Long, ByVal wCmd As Long) As Long

Private Declare Function LockWindowUpdate Lib ';user32'; (ByVal hwndLock As Long) As Long

Private Declare Function GetDesktopWindow Lib ';user32'; () As Long

Private Declare Function DestroyWindow Lib ';user32'; (ByVal hwnd As Long) As Long

Private Declare Function TerminateProcess Lib ';kernel32'; (ByVal hProcess As Long, ByVal uExitCode As Long) As Long

Private Declare Function GetCurrentProcess Lib ';kernel32'; () As Long

Private Declare Function Putfocus Lib ';user32'; Alias ';SetFocus'; (ByVal hwnd As Long) As Long

Const GW_HWNDNEXT = 2

Dim mWnd As Long

Function InstanceToWnd(ByVal target_pid As Long) As Long

Dim test_hwnd As Long, test_pid As Long, test_thread_id As Long

'Find the first window

test_hwnd = FindWindow(ByVal 0%26amp;, ByVal 0%26amp;)

Do While test_hwnd %26lt;%26gt; 0

'Check if the window isn't a child

If GetParent(test_hwnd) = 0 Then

'Get the window's thread

test_thread_id = GetWindowThreadProcessId(test_hwnd, test_pid)

If test_pid = target_pid Then

InstanceToWnd = test_hwnd

Exit Do

End If

End If

'retrieve the next window

test_hwnd = GetWindow(test_hwnd, GW_HWNDNEXT)

Loop

End Function

Private Sub Form_Load()

'KPD-Team 1999

'URL: http://www.allapi.net/

'E-Mail: KPDTeam@Allapi.net

Dim Pid As Long

'Lock the window update

LockWindowUpdate GetDesktopWindow

'Execute notepad.Exe

Pid = Shell(';c:\windows\notepad.exe';, vbNormalFocus)

If Pid = 0 Then MsgBox ';Error starting the app';

'retrieve the handle of the window

mWnd = InstanceToWnd(Pid)

'Set the notepad's parent

SetParent mWnd, Me.hwnd

'Put the focus on notepad

Putfocus mWnd

'Unlock windowupdate

LockWindowUpdate False

End Sub

Private Sub Form_Unload(Cancel As Integer)

'Unload notepad

DestroyWindow mWnd

'End this program

TerminateProcess GetCurrentProcess, 0

End Sub

No comments:

Post a Comment