Ich bin bei den letzten Optimierungen eines für meine Firma geschriebenen kleinen BDE Systems.
Optimal wäre es jetzt, wenn ich ein einzeiliges rahmenloses mit Icons gefülltes Window am oberen Rand des Desktops platzieren könnte. (= eigene TaskLeiste oder Control Center oder ...)
Mit StickyWindow bleibt es zwar im Vordergrund, aber bei Maximierung anderer Applikationen ist deren Fenster nun natürlich oben beschnitten, da unter meines "gelegt".
Wie teile ich Windows mit, dass dieser Bereich nun nicht mehr zur Verfügung steht und andere Fenster bis unterhalb meines Fensters maximieren. (analog Taskleiste)
Habe leider im Forum auf Stichwortsuche nichts gefunden. Weiss jemand Rat oder hat einen Link auf die vielleicht doch schon gefundene Lösung?
Danke im voraus
Robert
StickyWindow Rand -> Wie maximieren andere WinApps korrek
Dieser Code ist von Freak link zum Beitrag findest du unter dem Code
http://www.purebasic.fr/english/viewtop ... ght=appbar
Code: Alles auswählen
Callback to update all non-child maximized windows
Procedure.l UpdateWindowsProc(hWnd.l, *desktop.RECT)
If IsZoomed_(hWnd)
MoveWindow_(hWnd, *desktop\left, *desktop\top, *desktop\right-*desktop\left, *desktop\bottom-*desktop\top, #TRUE)
EndIf
ProcedureReturn #TRUE
EndProcedure
; Get actual desktop size (without Taskbar)
SystemParametersInfo_(#SPI_GETWORKAREA, 0, @desktop.RECT, 0)
If OpenWindow(0, desktop\left, desktop\top, 0, 0, #PB_Window_SystemMenu, "")
; resize Window to not overlap the Taskbar, and to 50 pixel width
SetWindowPos_(WindowID(),#HWND_TOPMOST,0,0,50,desktop\bottom-desktop\top,#SWP_NOMOVE)
; now calculate the new desktop rectangle
desktopnew.RECT
desktopnew\left = desktop\left + WindowWidth() + GetSystemMetrics_(#SM_CXFIXEDFRAME)*2
desktopnew\right = desktop\right
desktopnew\top = desktop\top
desktopnew\bottom = desktop\bottom
; set new desktop rectangle
SystemParametersInfo_(#SPI_SETWORKAREA, 0, @desktopnew, #SPIF_SENDWININICHANGE)
; update all windows (because most do not react to the #WM_SETTINGCHANGE message
EnumWindows_(@UpdateWindowsProc(), @desktopnew)
; here comes all the rest of your prog (in my case, only wait)
Repeat
Until WaitWindowEvent() = #PB_EventCloseWindow
; reset desktop to old size
SystemParametersInfo_(#SPI_SETWORKAREA, 0, @desktop, #SPIF_SENDWININICHANGE)
; update windows again
EnumWindows_(@UpdateWindowsProc(), @desktop)
EndIf
End
Purebasic 5.0 32bit und 64 bit
I'm back from hell
I'm back from hell
Problem gelöst!
Vielen Dank für die schnelle Hilfe.
Der Code funktioniert wie benötigt.
Gruß
Robert
Der Code funktioniert wie benötigt.
Gruß
Robert