13. februar 2003 - 23:59Der er
7 kommentarer og 1 løsning
Hvordan lukker man alle åbne vinduer
Jeg skal bruge noget kode, der kan lukke alle åbne vinduer undtagen det vindue som programmet afvikles i samt et enkelt browser-vindue. Jeg kunne forestille mig at der var noget med gennemløbe alle åbne vinduers handle og lukke dem hvis deres titel ikke svarede til en af de 2 vinduer jeg fortsat ønsker åbne (programmet og den ene browser). Det kan vel gøres med GetNextWindow() og DestroyWindow() eller lign.?
På en form: Private Sub Form_Load() Me.AutoRedraw = True EnumWindows AddressOf EnumWindowsProc, ByVal 0& End Sub
I et modul: Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Boolean Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As Long Declare Function IsIconic Lib "user32" (ByVal hwnd As Long) As Long
Public Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Boolean Dim sSave As String, Ret As Long If IsWindowVisible(hwnd) And IsIconic(hwnd) Then Ret = GetWindowTextLength(hwnd) sSave = Space(Ret) GetWindowText hwnd, sSave, Ret + 1 Form1.Print Str$(hwnd) + " " + sSave 'fortsæt enumeration End If EnumWindowsProc = True End Function
Med dette får du alle synlige vinduer skrevet ud på din form. Du skal så selvfølgelig ændre det, så vinduerne lukkes i stedet (brug CloseWindow(hwnd)), bortset fra dem, der hedder det 'rigtige' i title bar. Til at bygge det op med, kan du med fordel bruge flg. API kald:
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long Private Declare Function CloseWindow Lib "user32" (ByVal hwnd As Long) As Long
Så er jeg tilbage efter 2 ugers vinterferie :) Takket været svaret fra driis har jeg kunne identificere de enkelte vinduers handle (og titel med GetWindowText). Jeg kan goså godt minimere dem med CloseWindow, men når jeg bruger DestroyWindow til at lukke dem (så var mit formål), virker det ikke. Kan det være noget med at et VB-program ikke kan lukke vinduer der er åbnet af andre applikationer?
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.