/ Forside/ Teknologi / Udvikling / VB/Basic / Spørgsmål
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
List alle kørende processor?
Fra : kyllekylle
Vist : 745 gange
200 point
Dato : 21-06-01 10:58

Hej jeg er igang med et program, hvor jeg skal opsnappe alle kørende programmer og derefter minimere dem alle sammen.

Nu er mit spørgsmål så, hvordan kan jeg få fat i alle kørende programmer?

Kyllekylle

 
 
Accepteret svar
Fra : pete

Modtaget 210 point
Dato : 21-06-01 11:03

Følgende kode lister processerne og tilføjer dem til en listbox :



Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd 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 Command1_Click()
LoadTaskList
End Sub

Sub LoadTaskList()
Dim CurrWnd As Long
Dim Length As Long
Dim TaskName As String
Dim Parent As Long
List1.Clear
CurrWnd = GetWindow(Form1.hwnd, GW_HWNDFIRST)
While CurrWnd <> 0
Parent = GetParent(CurrWnd)
Length = GetWindowTextLength(CurrWnd)
TaskName = Space$(Length + 1)
Length = GetWindowText(CurrWnd, TaskName, Length + 1)
TaskName = Left$(TaskName, Len(TaskName) - 1)

If Length > 0 Then
If TaskName <> Me.Caption Then
List1.AddItem TaskName
End If
End If
CurrWnd = GetWindow(CurrWnd, GW_HWNDNEXT)
DoEvents
Wend
End Sub

Godkendelse af svar
Fra : kyllekylle


Dato : 21-06-01 11:13

Tak Pete,

Du er min redningsmand.

Kyllekylle               

Kommentar
Fra : pete


Dato : 21-06-01 11:33

Undskyld, jeg manglede og så lige minimeringsdelen; du kan minimere et vindue

Du minimerer et vindue ved at bruge følgende API-kald :

Dim retval As Long
retval = ShowWindow(Hwnd, SW_MINIMIZE) ' hvor "hwnd" er vinduet s handle...

Du skal have defineret følgende :
Declare Function ShowWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
og du kan bruge følgende konstanter :
SW_HIDE = 0
Hide the window.
SW_MAXIMIZE = 3
Maximize the window.
SW_MINIMIZE = 6
Minimize the window.
SW_RESTORE = 9
Restore the window (not maximized nor minimized).
SW_SHOW = 5
Show the window.
SW_SHOWMAXIMIZED = 3
Show the window maximized.
SW_SHOWMINIMIZED = 2
Show the window minimized.
SW_SHOWMINNOACTIVE = 7
Show the window minimized but do not activate it.
SW_SHOWNA = 8
Show the window in its current state but do not activate it.
SW_SHOWNOACTIVATE = 4
Show the window in its most recent size and position but do not activate it.
SW_SHOWNORMAL = 1
Show the window and activate it (as usual).







Ellers kan du minimere ALLE vinduer på følgende måde :

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const KEYEVENTF_KEYUP = &H2
Private Const VK_LWIN = &H5B


Private Sub MinimizeAll()
keybd_event VK_LWIN, 0, 0, 0
keybd_event Asc("M"), 0, 0, 0
keybd_event VK_LWIN, 0, KEYEVENTF_KEYUP, 0
End Sub


Kommentar
Fra : kyllekylle


Dato : 21-06-01 11:49

Tusinde tak Pete, du gør mit arbejde nemt.

Hvordan kan jeg så checke om et window er hidden? Jeg prøvede at køre alle programmer igennem og minimere dem alle, men der blev også taget programmer som var hidden med, og så døede min computer.
Jeg skal gemme alle windows handler, så jeg kan komme tilbage til den tilstand jeg var i før jeg minimerede vinduerne, så jeg kan desværre ikke bruge din function MinimizeAll().

Kommentar
Fra : pete


Dato : 21-06-01 12:13

Du kan bruge endnu et API-kald til se om et vidue er hidden :

Private Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As Long

dim ret as long
ret = IsWindowVisible(hwnd)

Kommentar
Fra : kyllekylle


Dato : 21-06-01 15:05

Tak for det hele Pete, nu virker det.

Du har følgende muligheder
Eftersom du ikke er logget ind i systemet, kan du ikke skrive et indlæg til dette spørgsmål.

Hvis du ikke allerede er registreret, kan du gratis blive medlem, ved at trykke på "Bliv medlem" ude i menuen.
Søg
Reklame
Statistik
Spørgsmål : 177549
Tips : 31968
Nyheder : 719565
Indlæg : 6408820
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste