TaskManager

By | 2002-06-01

Here’s a simple application to function like the Windows Task Manager…

Original Author: Found on the World Wide Web

Assumptions

Start
‘ a new project and add the following controls to the form:
‘ Control Name Caption
‘ ———————————————————-
‘ commandbutton cmdRefresh Refresh
‘ commandbutton cmdSwitch Switch
‘ commandbutton cmdExit Exit
‘ listbox lstApp

API Declarations

‘for 16 bit (VB3 and VB4-16) use these:
Declare Function ShowWindow Lib “User” _
(ByVal hWnd As Integer, ByVal flgs As Integer) _
As Integer
Declare Function GetWindow Lib “User” _
(ByVal hWnd As Integer, ByVal wCmd As Integer) _
As Integer
Declare Function GetWindowWord Lib “User” _
(ByVal hWnd As Integer, ByVal wIndx As Integer) _
As Integer
Declare Function GetWindowLong Lib “User” _
(ByVal hWnd As Integer, ByVal wIndx As Integer) As Long
Declare Function GetWindowText Lib “User” _
(ByVal hWnd As Integer, ByVal lpSting As String, _
ByVal nMaxCount As Integer) As Integer
Declare Function GetWindowTextLength Lib “User” _
(ByVal hWnd As Integer) As Integer
Declare Function SetWindowPos Lib “User” _
(ByVal hWnd As Integer, ByVal insaft As Integer, _
ByVal x%, ByVal y%, ByVal cx%, ByVal cy%, _
ByVal flgs As Integer) As Integer
Const WS_MINIMIZE = &H20000000 ‘ Style bit ‘is minimized’
Const HWND_TOP = 0 ‘ Move to top of z-order
Const SWP_NOSIZE = &H1 ‘ Do not re-size window
Const SWP_NOMOVE = &H2 ‘ Do not reposition window
Const SWP_SHOWWINDOW = &H40 ‘ Make window visible/active
Const GW_HWNDFIRST = 0 ‘ Get first Window handle
Const GW_HWNDNEXT = 2 ‘ Get next window handle
Const GWL_STYLE = (-16) ‘ Get Window’s style bits
Const SW_RESTORE = 9 ‘ Restore window
Dim IsTask As Long ‘ Style bits for normal task
‘ The following bits will be combined to define properties
‘ of a ‘normal’ task top-level window. Any window with ‘ these set will be
included in the list:
Const WS_VISIBLE = &H10000000 ‘ Window is not hidden
Const WS_BORDER = &H800000 ‘ Window has a border
‘ Other bits that are normally set include:
Const WS_CLIPSIBLINGS = &H4000000 ‘ can clip windows
Const WS_THICKFRAME = &H40000 ‘ Window has thick border
Const WS_GROUP = &H20000 ‘ Window is top of group
Const WS_TABSTOP = &H10000 ‘ Window has tabstop

For VB4 32-bit change the function defintions to the following:
Private Declare Function ShowWindow Lib “User32” _
(ByVal hWnd As Long, ByVal flgs As Long) As Long
Private Declare Function GetWindow Lib “User32” _
(ByVal hWnd As Long, ByVal wCmd As Long) As Long
Private Declare Function GetWindowWord Lib “User32” _
(ByVal hWnd As Long, ByVal wIndx As Long) As Long
Private Declare Function GetWindowLong Lib “User32” Alias “GetWindowLongA” _
(ByVal hWnd As Long, ByVal wIndx As Long) As Long
Private Declare Function GetWindowText Lib “User32” Alias “GetWindowTextA” _
(ByVal hWnd As Long, ByVal lpSting As String, ByVal nMaxCount As Long) As
Long
Private Declare Function GetWindowTextLength Lib “User32” Alias
“GetWindowTextLengthA” _
(ByVal hWnd As Long) As Long
Private Declare Function SetWindowPos Lib “User32” (ByVal hWnd As Long, _
ByVal insaft As Long, ByVal x%, ByVal y%, ByVal cx%, ByVal cy%, _
ByVal flgs As Long) As Long

Code

Sub cmdExit_Click ()
        Unload Me        ' Get me out of here!
        Set activate = Nothing ' Kill Form reference for good measure
        End Sub
        Sub cmdRefresh_Click ()
        FindAllApps ' Update list of tasks
        End Sub
        Sub cmdSwitch_Click ()
        Dim hWnd As Long  ' handle to window
        Dim x As Long     ' work area
        Dim lngWW As Long   ' Window Style bits
        If lstApp.ListIndex < 0 Then Beep: Exit Sub
        ' Get window handle from listbox array
        hWnd = lstApp.ItemData(lstApp.ListIndex)
        ' Get style bits for window
        lngWW = GetWindowLong(hWnd, GWL_STYLE)
        ' If minimized do a restore
        If lngWW And WS_MINIMIZE Then
            x = ShowWindow(hWnd, SW_RESTORE)
        End If
        ' Move window to top of z-order/activate; no move/resize
        x = SetWindowPos(hWnd, HWND_TOP, 0, 0, 0, 0, _
            SWP_NOMOVE Or SWP_NOSIZE Or SWP_SHOWWINDOW)
        End Sub
        Sub FindAllApps ()
        Dim hwCurr As Long
        Dim intLen As Long
        Dim strTitle As String
        ' process all top-level windows in master window list
        lstApp.Clear
        hwCurr = GetWindow(Me.hWnd, GW_HWNDFIRST) ' get first window
        Do While hwCurr ' repeat for all windows
         If hwCurr <> Me.hWnd And TaskWindow(hwCurr) Then
          intLen = GetWindowTextLength(hwCurr) + 1 ' Get length
          strTitle = Space$(intLen) ' Get caption
          intLen = GetWindowText(hwCurr, strTitle, intLen)
          If intLen > 0 Then ' If we have anything, add it
           lstApp.AddItem strTitle
        ' and let's save the window handle in the itemdata array
           lstApp.ItemData(lstApp.NewIndex) = hwCurr
          End If
         End If
         hwCurr = GetWindow(hwCurr, GW_HWNDNEXT)
        Loop
        End Sub
        Sub Form_Load ()
        IsTask = WS_VISIBLE Or WS_BORDER ' Define bits for normal task
        FindAllApps            ' Update list
        End Sub
        Sub Form_Paint ()
        FindAllApps ' Update List
        End Sub
        Sub Label1_Click ()
        FindAllApps ' Update list
        End Sub
        Sub lstApp_DblClick ()
        cmdSwitch.Value = True
        End Sub
        Function TaskWindow (hwCurr As Long) As Long
        Dim lngStyle As Long
        lngStyle = GetWindowLong(hwCurr, GWL_STYLE)
        If (lngStyle And IsTask) = IsTask Then TaskWindow = True
        End Function

Author: dwirch

Derek Wirch is a seasoned IT professional with an impressive career dating back to 1986. He brings a wealth of knowledge and hands-on experience that is invaluable to those embarking on their journey in the tech industry.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.