- Код: Выделить всё
Option Explicit
Const ABM_NEW = &H0
Const ABM_REMOVE = &H1
Const ABM_SETPOS = &H3
Const ABE_LEFT = 0
Const ABE_TOP = 1
Const ABE_RIGHT = 2
Const ABE_BOTTOM = 3
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
Private Declare Function SHAppBarMessage _
Lib "shell32.dll" _
(ByVal dwMessage As Long, pData As APPBARDATA) As Long
Private Sub Form_Load()
Dim abd As APPBARDATA
abd.cbSize = Len(abd)
abd.hwnd = hwnd
SHAppBarMessage ABM_NEW, abd 'добавляем себя в качестве новой панели инструментов.
abd.rc.Top = Screen.Height / Screen.TwipsPerPixelY - 300 'устанавливаем якобы свою макушку
abd.uEdge = ABE_BOTTOM 'сдвигать будем снизу
SHAppBarMessage ABM_SETPOS, abd
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim abd As APPBARDATA
abd.cbSize = Len(abd)
abd.hwnd = hwnd
SHAppBarMessage ABM_REMOVE, abd
End Sub
Код сдвигает рабочую область экрана снизу (система думает, что появилась новая панель инструментов рабочего стола).
Всё отлично работает, но вот только одна проблема: код сдвигает иконки на рабочем столе, а назад не возвращает
Как, кстати, и виндовская лупа, и любые родные виндовские панели. А как бы придумать, чтобы иконки возвращались?