Avatar billede avon Nybegynder
13. februar 2003 - 23:59 Der 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.?
Avatar billede ferdinand.k Mester
14. februar 2003 - 10:46 #1
kan du ikke bare lave en me!docmd.close for hver gang du åbner et nyt vindue? og altså lukke det "gamle" vindue?
Avatar billede ferdinand.k Mester
14. februar 2003 - 10:47 #2
så slipper du også for at have flere vinduer åbne på samme tid...
Avatar billede avon Nybegynder
14. februar 2003 - 10:50 #3
Det er nærmere en slags "oprydning" jeg skal bruge, hvor jeg ikke ved hvor hvilke eller hvor mange vinduer der er åbne.
Avatar billede driis Nybegynder
14. februar 2003 - 13:43 #4
Du kan bruge EnumWindows, f.eks. på denne måde:

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
Avatar billede terry Ekspert
16. februar 2003 - 17:32 #5
Dim Form As Form
  For Each Form In Forms
      Unload Form
      Set Form = Nothing
  Next Form
Avatar billede terry Ekspert
23. februar 2003 - 13:47 #6
avon, how it going here?
Avatar billede avon Nybegynder
05. marts 2003 - 21:25 #7
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?
Avatar billede avon Nybegynder
05. marts 2003 - 21:34 #8
Det lykkedes:
PostMessage(hwnd, WM_CLOSE, 0, 0)

Tak for hjælpen!
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