Avatar billede rusen Nybegynder
17. juni 2003 - 23:45 Der er 14 kommentarer og
1 løsning

lukke et program

Jeg ville lige høre om det er muligt at lukke et program i min vb kode ligesom man kan starte et...
Eks --> Shell("test.exe")

hvis ja hvordan????
Avatar billede dash Nybegynder
18. juni 2003 - 00:45 #1
her skulle være en fremgangsmåde

http://www.vbcity.com/forums/topic.asp?tid=183
Avatar billede elynge Nybegynder
18. juni 2003 - 09:32 #2
Hvis du åbner selv åbner med Shell("test.exe"):

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:

AppActivate App.Title
SendKeys "%{F4}", True
Avatar billede driis Nybegynder
18. juni 2003 - 11:44 #3
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.
Avatar billede rusen Nybegynder
18. juni 2003 - 14:24 #4
Elynge jeg tester lige din løsning....
Avatar billede rusen Nybegynder
18. juni 2003 - 15:30 #5
Driis jeg ville gerne have en uddybelse... da jeg er newbie inden for VB
Avatar billede rusen Nybegynder
18. juni 2003 - 15:35 #6
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....
Avatar billede driis Nybegynder
18. juni 2003 - 16:33 #7
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 ?
Avatar billede rusen Nybegynder
18. juni 2003 - 16:52 #8
jeg bruger vb6... og de programmer jeg ønsker at lukke er startet fra mit program med en 'shell' kommando.

hvilket title vindue snakker vi om her
Avatar billede driis Nybegynder
18. juni 2003 - 17:04 #9
Titlen på det vindue, som du ønsker lukket. Eks., hvis du har startet notesblok, står der "Notesblok" i titlen på vinduet.
Avatar billede rusen Nybegynder
18. juni 2003 - 17:20 #10
ja det ved jeg.......
Avatar billede driis Nybegynder
18. juni 2003 - 17:22 #11
Ja, men kender du titlen på de vinduer du åbner, eller kan titlen skifte mens programmet kører ?
Avatar billede rusen Nybegynder
18. juni 2003 - 17:26 #12
jeg er ikke helt sikker på at titlen ikke kan finde på at skifte mens programmet kører...
Har det stor betydning?
Avatar billede driis Nybegynder
18. juni 2003 - 18:12 #13
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
   
End Function
Avatar billede rusen Nybegynder
18. juni 2003 - 18:40 #14
jeg siger tusind tak fordi at du gad og give dig tiden til det.... Du får hermed dine point... Endnu engang tak.... Mvh RuSeN
Avatar billede rusen Nybegynder
19. juni 2003 - 10:29 #15
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....!
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