Tämä ohjelma listaa kaikki Windowsissa käynnissä olevat ohjelmat. Lista sisältää myös ne ohjelmat, joita ei näy tehtäväpalkissa, joten ainakin minulla ohjelmia oli kaikkiaan yli sata. Alkuun päästään FindWindow- ja GetWindow-funktioilla, sitten listaa kelataan GetNextWindow-funktiolla ja ohjelmien nimet haetaan funktiolla GetWindowText.
Formilla on luonnollisesti oltava ListBox, jonka nimi on List1. Haku käynnistyy Formista painamalla.
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetNextWindow Lib "user32" Alias "GetWindow" (ByVal hwnd As Long, ByVal wFlag As Long) As Long
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Const GW_HWNDFIRST = 0
Const GW_HWNDNEXT = 2
Private Sub Form_Click()
Dim uwnd As Long, onimi As String * 256
Dim s1 As String, s2 As String
Dim num As Long, yht As Integer
uwnd = FindWindow(s1, s2)
uwnd = GetWindow(uwnd, GW_HWNDFIRST)
Do While uwnd <> 0
num = GetWindowText(uwnd, onimi, 256)
If num > 0 Then
List1.AddItem onimi
yht = yht + 1
End If
uwnd = GetNextWindow(uwnd, GW_HWNDNEXT)
Loop
Caption = "Yhteensä: " & yht
End SubToi nyt kylläkin listaa kaikkea muuta kuin "käynnissä olevat ohjelmat"
Saiskohan toho mitenkää lisättyy sellast hommaa jol vois sulkee noit prosessei?
lainaus:
Saiskohan toho mitenkää lisättyy sellast hommaa jol vois sulkee noit prosessei?
mäki haluaisin tietää
niin mäkin
En nyt rupea kommentoimaan miten typerää tämä on, sillä jos/kun et tiedä mitä olet tekemässä, niin luultavasti kaadat tai sammutat koko Windowssisi tällä, mutta olkaapa hyvät...
Jos haluaa poistaa käynnissä olevia prosesseja, niin muuttakaapa Laaksosen koodia seuraavasti...
Private Sub Form_Click()
Dim uwnd As Long, onimi As String * 256
Dim s1 As String, s2 As String
Dim num As Long, yht As Integer
uwnd = FindWindow(s1, s2)
uwnd = GetWindow(uwnd, GW_HWNDFIRST)
Do While uwnd <> 0
num = GetWindowText(uwnd, onimi, 256)
If num > 0 Then
List1.AddItem onimi
'Otetaan talteen prosessin kahva. Tärkeä!
[b]List1.ItemData(List1.NewIndex) = uwnd[/b]
yht = yht + 1
End If
uwnd = GetNextWindow(uwnd, GW_HWNDNEXT)
Loop
Caption = "Yhteensä: " & yht
End SubLisätkää siis tuo boldattu koodinpätkä, formille uusi nappula(cmdDelProsess) ja sille seuraava koodi. (Huom. Lisätkää myös se SendMessagen API formin alkuun muiden APIen joukkoon sekä vakio Const WM_CLOSE = &H10)
Private Sub cmdDelProsess_Click()
Dim RetVal As Integer
With List1
If .ListIndex > -1 Then
RetVal = SendMessage(.ItemData(.ListIndex), WM_CLOSE, 0, 0&)
End If
End With
End Subsaaks tohon mitenkään WM_DESTROY
Aihe on jo aika vanha, joten et voi enää vastata siihen.