StickyWindow Rand -> Wie maximieren andere WinApps korrek

Anfängerfragen zum Programmieren mit PureBasic.
rfdistl
Beiträge: 2
Registriert: 24.09.2007 17:44
Wohnort: Stuttgart

StickyWindow Rand -> Wie maximieren andere WinApps korrek

Beitrag von rfdistl »

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
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag von roherter »

Dieser Code ist von Freak link zum Beitrag findest du unter dem Code

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
http://www.purebasic.fr/english/viewtop ... ght=appbar
Purebasic 5.0 32bit und 64 bit

I'm back from hell
rfdistl
Beiträge: 2
Registriert: 24.09.2007 17:44
Wohnort: Stuttgart

Problem gelöst!

Beitrag von rfdistl »

Vielen Dank für die schnelle Hilfe.

Der Code funktioniert wie benötigt.

Gruß
Robert
Antworten