VB: Position der Taskleiste ermitteln

Dieses Thema VB: Position der Taskleiste ermitteln im Forum "Webentwicklung, Hosting & Programmierung" wurde erstellt von aline234, 8. Sep. 2005.

Thema: VB: Position der Taskleiste ermitteln Hallo! Ist es irgendwie möglich zu ermitteln, ob sich die Taskleiste rechts oder links befindet? Mittlerweile kann...

  1. Hallo!

    Ist es irgendwie möglich zu ermitteln, ob sich die Taskleiste rechts oder links befindet? Mittlerweile kann ich schon unterscheiden, ob sie unten oder nicht unten ist, jedoch eben nicht genau ob rechts oder links. Gibt es da irgedneine Funktion oder Schnittstelle, die ich nutzen kann?

    Aline
     
  2. Also mittlerweile hab ich mir was aus dem internet zusammengebastelt:


    Das hier sind die Deklarationen der Funktionen, Konstanten etc.
    Code:
    'Dieser Source stammt von [url]http://www.activevb.de[/url]
    'und kann frei verwendet werden. Für eventuelle Schäden
    'wird nicht gehaftet.
    
    'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
    'Ansonsten viel Spaß und Erfolg mit diesem Source!
    
    
    Private Declare Function SHAppBarMessage Lib shell32.dll _
            (ByVal dwMessage As Long, pData As APPBARDATA) As _
            Long
    
    Private Const HORZRES = 8
    Private Const VERTRES = 10
            
    Private Const ABM_GETTASKBARPOS = &H5
    
    Private Type RECT
      Left As Long
      Top As Long
      Right As Long
      Bottom As Long
    End Type
    
    Private Type APPBARDATA
      cbSize As Long
      hwnd As Long
      uCallbackMessage As Long
      uEdge As Long
      rc As RECT
      lParam As Long
    End Type
    
    Public Enum tBarAlign
      tbaLinks = 0
      tbaRechts = 1
      tbaOben = 2
      tbaUnten = 3
    End Enum
    
    Deklaratin der API zum Ermitteln der Bildschirmauflösung. (brauch ich für die eigentliche Aufgabe, erklär ich noch genauer)
    Code:
    '##################Auflösung ermitteln###################
    Private Declare Function GetDC Lib user32 _
     (ByVal hwnd As Long) As Long
     
    Private Declare Function GetDeviceCaps Lib gdi32 _
     (ByVal hdc As Long, ByVal nIndex As Long) As Long
     
    Private Declare Function ReleaseDC Lib user32 _
     (ByVal hwnd As Long, ByVal hdc As Long) As Long
    '#############Auflösung ermitteln#########################
    
    Funktion um herauszufinden, ob die Taskleiste immer im Vordergrund ist.
    Code:
    Public Function IsTaskBarOnTop() As Boolean
      Dim AppBar As APPBARDATA
      Dim State As Long
      
      Const ABM_GETSTATE = &H4
      Const ABS_ALWAYSONTOP = &H2
      
      AppBar.cbSize = Len(AppBar)
      State = SHAppBarMessage(ABM_GETSTATE, AppBar)
    
      IsTaskBarOnTop = (State = ABS_ALWAYSONTOP)
    End Function
    Position der Taskleiste ermitteln
    Code:
    Public Function TaskBarAlign() As tBarAlign
      Dim AppBar As APPBARDATA
      Dim lResult As Long
      Dim tbHeight As Long
      Dim tbWidth As Long
    
      Const ABM_GETTASKBARPOS = &H5
    
      lResult = SHAppBarMessage(ABM_GETTASKBARPOS, AppBar)
    
     -> Größe der Taskbar
      With AppBar.rc
        tbHeight = .Bottom - .Top
        tbWidth = .Right - .Left
      End With
    
     -> Anhand der Größe die Position ermitteln
      If tbHeight < Screen.Height / Screen.TwipsPerPixelY Then
        If AppBar.rc.Top <= 0 Then
          TaskBarAlign = tbaOben
        Else
          TaskBarAlign = tbaUnten
        End If
      Else
        If AppBar.rc.Left <= 0 Then
          TaskBarAlign = tbaLinks
        Else
          TaskBarAlign = tbaRechts
        End If
      End If
    End Function
    Höhe der Taskleiste ermitteln
    Code:
    ' Höhe in Pixel
    Public Function TaskBarHeight() As Long
      Dim AppBar As APPBARDATA
      Dim lResult As Long
      
      Const ABM_GETTASKBARPOS = &H5
    
      lResult = SHAppBarMessage(ABM_GETTASKBARPOS, AppBar)
    
     -> Größe der Taskbar
      With AppBar.rc
        TaskBarHeight = .Bottom - .Top
      End With
       
    End Function
    
    Breite der Taskbar ermitteln
    Code:
    ' Breite in Pixel
    Public Function TaskBarWidth() As Long
      Dim AppBar As APPBARDATA
      Dim lResult As Long
    
      
      Const ABM_GETTASKBARPOS = &H5
    
      lResult = SHAppBarMessage(ABM_GETTASKBARPOS, AppBar)
    
     -> Breite der Taskbar
      With AppBar.rc
        TaskBarWidth = .Right - .Left
      End With
    
    End Function
    Breite der Auflösung ermitteln
    Code:
    Public Property Get ScreenBreite() As Long
      Dim BnDC As Long
      
      BnDC = GetDC(0)
      ScreenBreite = GetDeviceCaps(BnDC, HORZRES)
      ReleaseDC 0, BnDC
      
    End Property
    Höhe der Auflösung ermitteln
    Code:
    Public Property Get ScreenHoehe() As Long
      
      Dim HnDC As Long
      
      HnDC = GetDC(0)
      ScreenHoehe = GetDeviceCaps(HnDC, VERTRES)
      ReleaseDC 0, HnDC
    
    End Property
    
    Auflösung wird ermittelt, Position und Größe der taskleiste wird ermittelt und dementsprechend das Formular angepasst
    Code:
    Private Sub Form_Load()
    
        Form1.Height = ScreenHoehe * 20     'Funktion ScreenHoehe
        Form1.Height = ScreenWidth * 20     ->Funktion ScreenBreite
        Form1.Top = 0
        Form1.Left = 0
    
        Dim tbPosition As Byte
        Dim tbHoehe As Integer
        Dim tbBreite As Integer
        Dim tbVordergrund As String
    
        tbPosition = TaskBarAlign
        tbHoehe = TaskBarHeight * 20
        tbBreite = TaskBarWidth * 20
        tbVordergrund = IsTaskBarOnTop
    
        Select Case TaskBarAlign
        Case 0 ->links
            Form1.Width = Form1.Width - tbBreite     
            Form1.Left = Form1.Left + tbBreite
        Case 1 ->rechts
            Form1.Width = Form1.Width - tbBreite     
        Case 2 ->oben
            Form1.Height = Form1.Height - tbHoehe
            Form1.Top = Form1.Top + tbHoehe
        Case 3 ->unten
            Form1.Height = Form1.Height - tbHoehe
        Case Else
            MsgBox (fehler)
        End Select
        
    End Sub
    Es soll also je nachdem an welcher Stelle sich die Taskleiste befindet und wie groß sie ist die größe des Formulars angepasst werden. Am Anfang ist das Formular so groß wie die Auflösung des Bildschirms. Damit die Taskleiste aber nichts auf dem Formular überdecken kann, soll das Formular jeweils an der Kante der Taskleiste enden, bzw. anfangen.
    Das Ergebnis von ScreenHoehe, ScreenBreite, TaskBarHeight und TaskBarWidth wird mal 20 gerechnet, da nicht in Pixeln sondern in Twips gerechent werden soll (1 Pixel = 20 Twips).

    Mein Problem:
    Die Höhe und breite der Taskleiste wird richtig ermittelt, ebenfalls die Auflösung. Ist die Taskleiste unten wird korrekt von der Höhe des Formulars die Höhe der Taskleiste abgezogen und auch richtig dargestellt. Ist die Taskleiste aber an den anderen Seiten, wird zwar ebenfalls korrekt gerechnet, allerdings nicht richtig angezeigt. Zwischen Taskleiste und Formular ist immer noch etwas Platz, es scheint also, als ob zu viel vom Formular abgezogen wurde. Was allerdings nicht sein kann, da richtig gerechnet wurde.#

    Woran kann das liegen?
     
  3. Hab vergessen zu erwähnen, dass ich VB6 unter XP benutze. :-[
     
  4. So, habs rausgefunden. Falls jemand das gleiche Problem hat, hier der Quelltext:


    Code:
    Option Explicit
    ' zunächst die API-Deklaration
    Private Declare Function SHAppBarMessage Lib _
    shell32.dll (ByVal dwMessage As Long, _
    pData As APPBARDATA) As Long
    
    ' und die APPBAR-Struktur
    Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
    End Type
    
    Private Type APPBARDATA
    cbSize As Long
    hWnd As Long
    uCallbackMessage As Long
    uEdge As Long
    rc As RECT
    lParam As Long
    End Type
    
    Public Enum tBarAlign
    tbaLinks = 0
    tbaRechts = 1
    tbaOben = 2
    tbaUnten = 3
    End Enum
    
    Public Function IsTaskBarOnTop() As Boolean
    Dim AppBar As APPBARDATA
    Dim State As Long
    
    Const ABM_GETSTATE = &H4
    Const ABS_ALWAYSONTOP = &H2
    
    AppBar.cbSize = Len(AppBar)
    State = SHAppBarMessage(ABM_GETSTATE, AppBar)
    
    IsTaskBarOnTop = (State = ABS_ALWAYSONTOP)
    End Function
    
    
    Public Function TaskBarAlign() As tBarAlign
    Dim AppBar As APPBARDATA
    Dim lResult As Long
    Dim tbheight As Long
    Dim tbwidth As Long
    
    Const ABM_GETTASKBARPOS = &H5
    
    lResult = SHAppBarMessage(ABM_GETTASKBARPOS, AppBar)
    
    ' Größe der Taskbar
    With AppBar.rc
    tbheight = .Bottom - .Top
    tbwidth = .Right - .Left
    End With
    
    ' Anhand der Größe die Position ermitteln
    If tbheight < Screen.Height / Screen.TwipsPerPixelY Then
    If AppBar.rc.Top <= 0 Then
    TaskBarAlign = tbaOben
    Else
    TaskBarAlign = tbaUnten
    End If
    Else
    If AppBar.rc.Left <= 0 Then
    TaskBarAlign = tbaLinks
    Else
    TaskBarAlign = tbaRechts
    End If
    End If
    End Function
    
    
    ' Höhe in Pixel
    Public Function TaskBarHeight() As Long
    Dim AppBar As APPBARDATA
    Dim lResult As Long
    Const ABM_GETTASKBARPOS = &H5
    
    lResult = SHAppBarMessage(ABM_GETTASKBARPOS, AppBar)
    
    ' Größe der Taskbar
    With AppBar.rc
    TaskBarHeight = .Bottom - .Top
    End With
    End Function
    
    ' Breite in Pixel
    Public Function TaskBarWidth() As Long
    Dim AppBar As APPBARDATA
    Dim lResult As Long
    Const ABM_GETTASKBARPOS = &H5
    
    lResult = SHAppBarMessage(ABM_GETTASKBARPOS, AppBar)
    
    ' Breite der Taskbar
    With AppBar.rc
    TaskBarWidth = .Right - .Left
    End With
    End Function
    
    Private Sub Command1_Click()
    'wenn horizontal unten:
    Me.Height = Screen.Height - Me.TaskBarHeight * Screen.TwipsPerPixelY
    Me.Top = 0
    Me.Left = 0
    Me.Width = Screen.Width
    End Sub
    
    Private Sub Form_Load()
        Dim tbheight As Long, tbwidth As Long
        
        tbheight = TaskBarHeight * Screen.TwipsPerPixelY
        tbwidth = TaskBarWidth * Screen.TwipsPerPixelX
    
        Form1.Top = 0
        Form1.Left = 0
        Form1.Height = Screen.Height
        Form1.Width = Screen.Width
        
        Select Case TaskBarAlign
        Case 0:->links
            Form1.Left = Form1.Left + tbwidth
            Form1.Width = Form1.Width - tbwidth
        Case 1:->rechts
            Form1.Width = Form1.Width - tbwidth
        Case 2:->oben
            Form1.Top = Form1.Top + tbheight
            Form1.Height = Form1.Height - tbheight
        Case 3:->unten
            Form1.Height = Form1.Height - tbheight
        Case Else:
            MsgBox (fehler!)
        End Select
    
    End Sub
     
Die Seite wird geladen...

VB: Position der Taskleiste ermitteln - Ähnliche Themen

Forum Datum
windows xp sp2 taskleiste falsch positioniert Windows XP Forum 26. Mai 2009
Positionseinstellungen: "Einige Einstellungen werden von Ihrer Organisation verwaltet" ???? Windows 10 Forum 20. Feb. 2016
Thunderbird: Cursor springt an falsche Position E-Mail-Programme 26. Dez. 2013
Position der Desktop Icons sichern und wiederherstellen Software: Empfehlungen, Gesuche & Problemlösungen 20. Juni 2010
Vorschaufenster - Position wird nicht gespeichert? Windows 7 Forum 28. Juli 2009