Gå til innhold

[LØST] Sendmessage "oppdaterer" formen


Anbefalte innlegg

EDIT: Etter et par restarts viste det seg at det funka. Er nok bare pc'en min som ikke er helt frisk :p

 

Hallo

 

Koden som lister opp alle vinduer, "oppdaterer" også formen. Altså formen kommer på toppen av alle andre former hver gang jeg lister. Det vil jeg ikke.. Har funnet ut at det er denne koden som gjør det:

Call SendMessage(frmTaskbar.lstNames.hwnd, LB_ADDSTRING, 0, ByVal sCaption)

Er det en annen måte å legge de til lista?

 

 

 

Slik se hele koden ut:

Public Function fEnumWindows(lst As ListBox) As Long
   With lst
     .Clear
     frmTaskbar.lstNames.Clear
     Call EnumWindows(AddressOf fEnumWindowsCallBack, .hwnd)
     fEnumWindows = .ListCount
   End With
End Function

Private Function fEnumWindowsCallBack(ByVal hwnd As Long, ByVal lParam As Long) As Long
   
   Dim lExStyle As Long, bHasNoOwner As Boolean, sAdd As String, sCaption As String
   
   If IsWindowVisible(hwnd) Then
       bHasNoOwner = (GetWindow(hwnd, GW_OWNER) = 0)
       lExStyle = GetWindowLong(hwnd, GWL_EXSTYLE)
       
       If (((lExStyle And WS_EX_TOOLWINDOW) = 0) And bHasNoOwner) Or _
           ((lExStyle And WS_EX_APPWINDOW) And Not bHasNoOwner) Then
           sAdd = hwnd: sCaption = GetCaption(hwnd)
           Call SendMessage(lParam, LB_ADDSTRING, 0, ByVal sAdd)
           Call SendMessage(frmTaskbar.lstNames.hwnd, LB_ADDSTRING, 0, ByVal sCaption)
       End If
   End If

   fEnumWindowsCallBack = True
End Function

Endret av Jonas
Lenke til kommentar
Videoannonse
Annonse

Hvorfor bruke API når man kan gjøre det samme i VB i omtrentlig samme hastighet? Jeg tror derfor du heller bør bruke AddItem prosedyren i List kontrollen, istedenfor å sende meldinger til vinduet.

 

Men uansett hva jeg gjorde greide jeg ikke å kopiere problemet ditt. Er du sikker på at dette er denne koden som forårsaker det hele?

 

Kanskje er det mulig å sette Visible til False og så til True igjen for å unngå at kontrollene oppdateres. Ellers kan du også prøve LockWindowUpdate API'en.

Endret av aadnk
Lenke til kommentar

Additem hadde jeg prøvd, men det funka heller ikke..

 

Det er en timer (100 interval) som lister opp alle vinduene med fEnumWindows. Det er da formen kommer over alle andre. Jeg har prøvd å hoppe over fEnumWindows i timern. Da funker alt, men jeg får jo ikke lista noe som helst.

 

LockWindowsUpdate gjorde bare formen usynelig. Den kom ikke frem da jeg satt koden i form load.

 

Edit: Ja, jeg er helt sikker. Tar jeg og "goto"-er forbi additem koden skjer det ingen ting!

Endret av Jonas
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...