아래는 프로세스 클리너 프로젝트 내 modCleaner.bas의 코드입니다. 여러 프로젝트가 함께 겹치다보니, 프로세스 클리너가 불완전한, 완성되지 못한 상태로 남아있었습니다. 제대로 동작하지 않을 수도 있으니, 그저 참고용으로 쓰시면 되겠네요.

Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function Process32First Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Sub CloseHandle Lib "kernel32" (ByVal hPass As Long)
Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Const PROCESS_TERMINATE As Long = (&H1)
Private Declare Function TerminateProcess Lib "kernel32.dll" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Private Const TH32CS_SNAPPROCESS As Long = &H2
Private Type PROCESSENTRY32
  dwSize As Long
  cntUsage As Long
  th32ProcessID As Long
  th32DefaultHeapID As Long
  th32ModuleID As Long
  cntThreads As Long
  th32ParentProcessID As Long
  pcPriClassBase As Long
  dwFlags As Long
  szExeFile As String * 260
End Type

Public UString As String

Private Function GetPidByImage(ByVal image As String) As Long
  On Local Error GoTo ErrOut:
  Dim hSnapShot As Long
  Dim uProcess As PROCESSENTRY32
  Dim r As Long, l As Long
  
  hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0&)
  If hSnapShot = 0 Then Exit Function
  uProcess.dwSize = Len(uProcess)
  r = Process32First(hSnapShot, uProcess)
  l = Len(image)
  If l = 0 Then Exit Function
  Do While r
    If LCase(Left(uProcess.szExeFile, l)) = LCase(image) Then
      GetPidByImage = uProcess.th32ProcessID
      Exit Do
    End If
    r = Process32Next(hSnapShot, uProcess)
  Loop
  Call CloseHandle(hSnapShot)
ErrOut:
End Function

Private Sub KillPID(ByVal pid As Long)
  On Local Error Resume Next
  Dim h As Long
  If pid = 0 Then Exit Sub
  h = OpenProcess(PROCESS_TERMINATE, False, pid)
  TerminateProcess h, 0
  CloseHandle h
  Sleep 1000
ErrOut:
End Sub

Public Function ProcessList(List As ListBox) As Boolean
    On Error GoTo WMIError
    Dim oWMI As Object, oQuery As Object, oProcessObject As Object
    arrData = Array("System Idle Process", "System", "csrss.exe", "services.exe", "lsass.exe", "svchost.exe" & _
    "", "wininit.exe", "SearchIndexer.exe", "winlogon.exe", "explorer.exe", "dwm.exe", "audiodg.exe", "smss.exe" & _
    "", "ctfmon.exe", "PCleaner.exe")
    Set oWMI = GetObject("winmgmts:")
    On Error GoTo 0
    List.Clear
    Set oQuery = oWMI.ExecQuery("SELECT * FROM win32_process")
    For Each oProcessObject In oQuery
        For i = 0 To UBound(arrData)
            If arrData(i) = oProcessObject.Name Then GoTo Passed
        Next i
        List.AddItem oProcessObject.Name
Passed:
    Next
    ProcessList = True
    Exit Function
WMIError:
    ProcessList = False
End Function

Public Function ProcessClear(List As ListBox) As Boolean
   For i = 0 To List.ListCount - 1
        KillPID GetPidByImage(List.List(i))
    Next i
End Function

Public Function ProgramList(List As ListBox) As String
On Error Resume Next
    Dim Application
    Dim Checker As Boolean
    
    UString = vbNullString
    Checker = False
    Set ws = CreateObject("WScript.Shell")
    Set Reg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\." & "\root\default:StdRegProv")
    kp = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
    Reg.EnumKey &H80000002, kp, subkeys

    For Each subkey In subkeys
        Application = ws.RegRead("HKLM\" & kp & "\" & subkey & "\DisplayName")
        RawGuid = ws.RegRead("HKLM\" & kp & "\" & subkey & "\UninstallString")
        Publisher = ws.RegRead("HKLM\" & kp & "\" & subkey & "\Publisher")
        Guid = Mid(RawGuid, InStr(RawGuid, "{"), 38)
        
        If Publisher <> "Microsoft Corporation" And Publisher <> "Oracle" And Publisher <> "NVIDIA Corporation" & _
        "" And Publisher <> "Sun Microsystems, Inc." And Publisher <> "Haansoft" And RawGuid <> vbNullString Then
            For i = 0 To List.ListCount - 1
                If List.List(i) = Application Then
                    List.RemoveItem i
                End If
            Next i
            List.AddItem Application & " [" & RawGuid & "]"
        End If
    Next

    Set ws = Nothing
End Function