Avatar billede .stx Nybegynder
09. februar 2006 - 10:18 Der er 2 kommentarer og
1 løsning

"Always on top" men under "taskbar"

Hej alle vb-nørder
Jeg har et lille problem med et ellers perfekt program jeg har lavet, til at vise hvis der er kommet nye ordre i en internet butik. Programmet kommer kørerende op nede i højre hjørne, fx ligesom når der kommer en ny chatbesked i messenger/G-talk. Det virker også fint.

Selvfølgelig har jeg sat programmet til "always on top" med koden:
[code]
Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
---
Const SWP_NOSIZE = &H1
    Const SWP_NOMOVE = &H2
    Const SWP_NOACTIVATE = &H10
    Const SWP_SHOWWINDOW = &H40
    Const HWND_TOPMOST = -1
    wFlags = SWP_NOMOVE Or SWP_NOSIZE Or SWP_SHOWWINDOW Or SWP_NOACTIVATE
    SetWindowPos hWindow, HWND_TOPMOST, 0, 0, 0, 0, wFlags
[/code]

Det virker også fint, men "HWND_TOPMOST" dvs. -1 sætter mit program over alt andet i windows OGSÅ taskbaren når programmet ruller op fra bunden, hvilket ikke er hensigtsmæssigt.

Er der nogen der ved hvordan man sætter et program til "always on top", men under taskbaren?

NB:
"HWND_TOP = 0", "Me.show vbModal", "Me.show vbSystemModal" eller "Me.show(1)" virker heller ikke!
Jeg har søgt google + div. fora tomme, for at finde svar, så håber at i kan give mig svar.
Avatar billede sjh Nybegynder
09. februar 2006 - 14:52 #1
Option Explicit

Private Declare Function BringWindowToTop Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Private Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOACTIVATE = &H10
Private Const SWP_SHOWWINDOW = &H40
Private Const HWND_TOPMOST = -1

Private Sub Form_Load()
Dim hTray As Long
Dim wFlags As Long

  wFlags = SWP_NOMOVE Or SWP_NOSIZE Or SWP_SHOWWINDOW Or SWP_NOACTIVATE
  SetWindowPos Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, wFlags

  hTray = FindWindow("Shell_TrayWnd", vbNullString)
  BringWindowToTop hTray ' Flytter din taskbar til top
End Sub
Avatar billede .stx Nybegynder
09. februar 2006 - 16:07 #2
Mange tak!
Avatar billede sjh Nybegynder
09. februar 2006 - 16:53 #3
selv tak..

hvis du mangler lidt flere triks så se lidt på den her:
http://vbnet.mvps.org/code/project/msim_notify.htm
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

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