Williams писал(а):Требуется сделать так, чтобы определенная область экрана была "зарезервирована" и окна размещались только в доступной области. Я могу это осуществить с целой формой, сделав ее дескбаром, но в данном случае мне нужно без участия форм - таскбар всего-лишь контрол на существующей форме.
ANDLL писал(а):shappbarmessage
Imports System.Runtime.InteropServices
Module Main
Sub Main()
Dim hPoint As IntPtr = IntPtr.Zero
Dim WorkArea As WIN32API_RECT
hPoint = Marshal.AllocHGlobal(Marshal.SizeOf(WorkArea))
Console.Write("Нажмите любую клавишу для получения рабочей области...") : Console.ReadKey()
Marshal.StructureToPtr(WorkArea, hPoint, True)
SystemParametersInfo(SPI_.GETWORKAREA, Marshal.SizeOf(WorkArea), hPoint, 0)
WorkArea = DirectCast(Marshal.PtrToStructure(hPoint, New WIN32API_RECT().GetType), WIN32API_RECT)
Console.WriteLine(WorkArea.ToString)
Console.Write("Нажмите любую клавишу для установки новой рабочей области (Right-200)...") : Console.ReadKey()
WorkArea.Right -= 200
Marshal.StructureToPtr(WorkArea, hPoint, True)
SystemParametersInfo(SPI_.SETWORKAREA, Marshal.SizeOf(WorkArea), hPoint, 0)
Console.WriteLine()
Console.WriteLine(WorkArea.ToString)
Console.Write("Нажмите любую клавишу для установки новой рабочей области (Right+200)...") : Console.ReadKey()
WorkArea.Right += 200
Marshal.StructureToPtr(WorkArea, hPoint, True)
SystemParametersInfo(SPI_.SETWORKAREA, Marshal.SizeOf(WorkArea), hPoint, 0)
Console.WriteLine()
Console.WriteLine(WorkArea.ToString)
Console.Write("Нажмите любую клавишу для выхода...") : Console.ReadKey()
End Sub
End Module
Module Win32API
Public Enum SPI_
SETWORKAREA = 47
GETWORKAREA = 48
End Enum
<StructLayout(LayoutKind.Sequential)> _
Public Structure WIN32API_RECT
Public Left As Int32
Public Top As Int32
Public Right As Int32
Public Bottom As Int32
Public Overloads Function ToString() As String
Return "Лево: " & Me.Left.ToString & "; Право: " & Me.Right & "; Верх: " & Me.Top & "; Низ: " & Me.Bottom
End Function
End Structure
<DllImport("User32.dll", EntryPoint:="SystemParametersInfoA")> _
Public Function SystemParametersInfo(ByVal uAction As Int32, ByVal uParam As Int32, ByVal lpvParam As IntPtr, ByVal fuWinIni As Int32) As Int32
End Function
End Module
Dim abd As APPBARDATA = New APPBARDATA
abd.cbSize = Marshal.SizeOf(abd)
abd.hWnd = pnlTaskbar.Handle
uCallbackMessage = RegisterWindowMessage("AppBarMessage")
abd.uCallbackMessage = uCallbackMessage
Dim ret As Long = SHAppBarMessage(CType(ABMsg.ABM_NEW, Integer), abd)
Это я один такой непонятливый? Или вопрос такой?но в данном случае мне нужно без участия форм - таскбар всего-лишь контрол на существующей форме.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 113