Dim ProgID as Double ' Åben program og gem Program ID ProgID = Shell("test.exe") ' Luk programet ved at aktivere programmet og sende en Alt+F4 til det AppActivate ProgID SendKeys "%{F4}", True
Har du ikke Program ID for det program du skal lukke kan du benytte programmets tittel i stedet:
Hvis det program du vil have lukket ikke accepterer ALT-F4, kan du i stedet lukke det ved at sende en WM_QUIT message med Windows SendMessage funktionen. Sig til, hvis du skal have dette uddybet noget mere.
Elynge: Det der sker her er jo at den hopper ud af selve programmet.... Jeg har lavet et program til at starte andre programmer med(Flere af gangen) jeg skal så bruge en måde hvor jeg kan gå ind og lukke det enkelte program efterhånden som jeg ikke har brug for det mere....
Bruger du VB6 eller VB .NET ? Og de programmer, du ønsker at lukke, er det allesammen nogle, du også har startet fra dit program. Eller ved du, for alle programmer du vil lukke, hvad der står i titellinjen i vinduet ?
Jeg spurgte om du kendte vinduets titel, fordi jeg havde en færdig løsning liggende, som finder det rigtige vindue på baggrund af vinduets titel. Men nu har jeg lavet en anden løsning, som finder det program der skal lukkes på baggrund af den .exe fil, det er blevet startet fra. Eks. KillProc("notepad.exe") lukker alle notesblok-vinduer. Indsæt flg. i et modul, så kan du bruge KillProc funktionen i din kode:
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
Public Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Boolean AppActivate procID SendKeys "%{F4}", True
End Function
Når man laver din funktion om sådan her, virker det....!
Synes godt om
Ny brugerNybegynder
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.