Avatar billede nameless Nybegynder
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 ?
Avatar billede semir Nybegynder
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
Avatar billede semir Nybegynder
16. april 2003 - 15:13 #2
Ctrl+Alt+Del  virker også til Win98 :)
Avatar billede nameless Nybegynder
16. april 2003 - 15:17 #3
D
Avatar billede nameless Nybegynder
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
Avatar billede semir Nybegynder
16. april 2003 - 15:24 #5
lol.... det er VB Spørgsmål ??? det kunne du bare have sagt ? ::::P
Avatar billede semir Nybegynder
16. april 2003 - 15:38 #6
kan du ikke finde noget på www.msdn.microsoft.com ???
Avatar billede martin_moth Mester
16. april 2003 - 16:12 #7
semir:
Under kategorien Visual Basic må forventes at komme spørgsmål til Visual Baisic

nameless:
http://www.eksperten.dk/spm/91484
http://www.eksperten.dk/spm/251084
Avatar billede somaliomar Praktikant
16. april 2003 - 16:21 #8
Avatar billede driis Nybegynder
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
Avatar billede nameless Nybegynder
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
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester