16. april 2003 - 15:04
Der er
9 kommentarer og
1 løsning
Lukning af process
Hvordan lukker man en process?
Altså finder processid fra et program der køre i baggrunden og lukker det.
fx hvis jeg ved der køre en fil i baggrunden der hedder: "kurt.exe" hvordan lukker jeg så det ?
16. april 2003 - 15:12
#1
Hvad Windows kører du ??!
Win 2000/XP
Ctrl+Shift+Esc eller Ctrl+Alt+Del (jobliste) ;), så får du oversiigt over de forskellige procss.
/SMCooL
16. april 2003 - 15:24
#4
Kan du kan ikke se vi er inde for programmering i visual basic? hvis du så tænker dig lidt om tror du så ikke også at svaret jeg gerne vil have er en kode til visual basic der gør det automatisk ?
Tænk dig lidt om før du skriver
16. april 2003 - 17:26
#9
Det du skal gøre, er først at få fat i process ID'et, som er associeret med EXE filnavnet. Derefter skal du finde processens hWnd, og sende en WM_DESTROY message til vinduet. Så skulle det gerne lukke.
Det kunne du f.eks. gøre med flg. kode. Kopier det ind i et modul, og du kan nu bruge KillProc(filnavn) til at lukke alle processer, som er startet af det bestemte exe navn, f.eks. KillProc("notepad.exe").
Const TH32CS_SNAPHEAPLIST = &H1
Const TH32CS_SNAPPROCESS = &H2
Const TH32CS_SNAPTHREAD = &H4
Const TH32CS_SNAPMODULE = &H8
Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST Or TH32CS_SNAPPROCESS Or TH32CS_SNAPTHREAD Or TH32CS_SNAPMODULE)
Const TH32CS_INHERIT = &H80000000
Const MAX_PATH As Integer = 260
Const WM_DESTROY = &H2
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 * MAX_PATH
End Type
Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Declare Function Process32First Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Declare Function Process32Next Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Declare Function EnumWindows Lib "user32.dll" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Declare Sub CloseHandle Lib "kernel32" (ByVal hPass As Long)
Public procID As Long
Public hWndToKill As Long
Sub KillProc(exeName As String)
hWndToKill = 0
procID = 1
Dim procs As PROCESSENTRY32
Dim ans As Long, r As Long
Dim hSnap As Long, exitCode As Long, hwnd As Long, tpID As Long
Dim l As Integer
procs.dwSize = Len(procs)
exeName = LCase(exeName)
l = Len(exeName)
hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0&)
ans = Process32First(hSnap, procs)
While (ans)
procs.szExeFile = LCase(procs.szExeFile)
If (exeName = Left(procs.szExeFile, l)) Then
procID = procs.th32ProcessID
r = EnumWindows(AddressOf EnumWindowsProc, ByVal 0&)
r = SendMessage(hWndToKill, WM_DESTROY, exitCode, 0)
CloseHandle hSnap
Exit Sub
End If
ans = Process32Next(hSnap, procs)
Wend
CloseHandle hSnap
End Sub
Public Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Boolean
Dim z As Long, thisProc As Long
z = GetWindowThreadProcessId(hwnd, thisProc)
If procID = thisProc Then
hWndToKill = hwnd
EnumWindowsProc = False ' stop enumeration
Else
EnumWindowsProc = True ' fortsæt enumeration
End If
End Function
17. april 2003 - 01:16
#10
jah driss.. det var jo lige det jeg manglede.. Bemærkede dog den ikke virkede ved de fleste af mine programmer men det hjalp da jeg var lidt mere venlige ved dem.. byttede destroy ud med close.. altså : Const WM_CLOSE = &H10