Gegenstück zu SetWindowPos?!

Für allgemeine Fragen zur Programmierung mit PureBasic.
Leo
Beiträge: 420
Registriert: 26.10.2004 18:26

Gegenstück zu SetWindowPos?!

Beitrag von Leo »

Moin,

ich suche nach einer Funktion, die das Gegenteil von SetWindowPos_() macht, nämlich informationen über das Fenster liefert.

Code: Alles auswählen

GetWindowPos_(@a.WINDOWPOS)
So, oder so ähnlich.

Danke.

P.S.: Ich brauche nur das hwndInsertAfter aus der Struktur, um festzustellen, ob das Fenster ein Stay-On-Top Fenster ist. Gibt es da vielleicht ne andere Lösung für?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Code: Alles auswählen

WindowX()
WindowY()
WindowHeight() 
WindowWidth() 
falls du dieses meinst
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

hab ich ihm schon über skype vorgeschlagen :lol:. Er will die Z Position des Fensters.
Bild
Leo
Beiträge: 420
Registriert: 26.10.2004 18:26

Beitrag von Leo »

ts-soft hat geschrieben:

Code: Alles auswählen

WindowX()
WindowY()
WindowHeight() 
WindowWidth() 
falls du dieses meinst
Siehe P.S. :)

Ich brache nur das hwndInsertAfter
Benutzeravatar
AndyMars
Beiträge: 141
Registriert: 08.09.2004 11:59
Computerausstattung: Win11 Prof 64bit, i5-13500 @ 4.8 GHz, 32GB RAM, Nvidia RTX 4070 TI
Wohnort: Zürich, Schweiz
Kontaktdaten:

Beitrag von AndyMars »

Ich würde GetTopWindow vorschlagen...
Grüsse von AndyMars
Leo
Beiträge: 420
Registriert: 26.10.2004 18:26

Beitrag von Leo »

Hmm nein, das is nich ganz das, was ich suche ^^ Das gibt mir ja nur Parents zurück.. ich will einfach nur wissen ob bei einem Fenster das Flag AlwaysOnTop gesetz is ^^
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8820
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Ich weiß nicht, ob es das ist, was du meinst, aber mein Programm EnumAllWindows liefert dir zu einem Handle auch ein Flag, ob ein Window topmost.

Zum Beispiel ist die Taskbar topmost. Hier der Code, der das herausfindet.

Code: Alles auswählen

Procedure.s dwExStyle(DWord.l)
  #WS_EX_COMPOSITED = $02000000
  #WS_EX_LAYERED = $80000
  #WS_EX_LAYOUTRTL = $400000
  #WS_EX_NOACTIVATE = $8000000
  #WS_EX_NOINHERITLAYOUT = $100000
  
  Text.s = ""
  If DWord & #WS_EX_ACCEPTFILES
    Text = Text + "accept drag-drop files, "
  EndIf
  If DWord & #WS_EX_APPWINDOW
    Text = Text + "taskbar window, "
  EndIf
  If DWord & #WS_EX_CLIENTEDGE
    Text = Text + "sunken edge border, "
  EndIf
  If DWord & #WS_EX_COMPOSITED
    Text = Text + "#WS_EX_COMPOSITED, "
  EndIf
  If DWord & #WS_EX_CONTEXTHELP
    Text = Text + "question mark button, "
  EndIf
  If DWord & #WS_EX_CONTROLPARENT
    Text = Text + "#WS_EX_CONTROLPARENT, "
  EndIf
  If DWord & #WS_EX_DLGMODALFRAME
    Text = Text + "double border, "
  EndIf
  If DWord & #WS_EX_LAYERED
    Text = Text + "layred, "
  EndIf
  If DWord & #WS_EX_LAYOUTRTL
    Text = Text + "Arabic/Hebrew, "
  EndIf
  If DWord & #WS_EX_LEFT
    Text = Text + "left-aligned, "
  EndIf
  If DWord & #WS_EX_LEFTSCROLLBAR
    Text = Text + "left scroll bar, "
  EndIf
  If DWord & #WS_EX_LTRREADING
    Text = Text + "left-to-right reading, "
  EndIf
  If DWord & #WS_EX_MDICHILD
    Text = Text + "MDI child, "
  EndIf
  If DWord & #WS_EX_NOACTIVATE
    Text = Text + "#WS_EX_NOACTIVATE, "
  EndIf
  If DWord & #WS_EX_NOINHERITLAYOUT
    Text = Text + "#WS_EX_NOINHERITLAYOUT, "
  EndIf
  If DWord & #WS_EX_NOPARENTNOTIFY
    Text = Text + "no #WS_PARENTNOTIFY message, "
  EndIf
  If DWord & #WS_EX_OVERLAPPEDWINDOW
    Text = Text + ""
  EndIf
  If DWord & #WS_EX_PALETTEWINDOW
    Text = Text + ""
  EndIf
  If DWord & #WS_EX_RIGHT
    Text = Text + "right-aligned, "
  EndIf
  If DWord & #WS_EX_RIGHTSCROLLBAR
    Text = Text + "right scroll bar, "
  EndIf
  If DWord & #WS_EX_RTLREADING
    Text = Text + "right-to-left reading, "
  EndIf
  If DWord & #WS_EX_STATICEDGE
    Text = Text + "3D border, "
  EndIf
  If DWord & #WS_EX_TOOLWINDOW
    Text = Text + "tool window, "
  EndIf
  If DWord & #WS_EX_TOPMOST
    Text = Text + "topmost, "
  EndIf
  If DWord & #WS_EX_TRANSPARENT
    Text = Text + "transparent, "
  EndIf
  If DWord & #WS_EX_WINDOWEDGE
    Text = Text + "raised edge, "
  EndIf
  
  If Text
    Text = Left(Text, Len(Text) - 2)
  Else
    Text = "n/a"
  EndIf
  ProcedureReturn Text
EndProcedure

Structure WINDOWINFO
  cbsize.l
  rcWindow.RECT
  rcClient.RECT
  dwStyle.l
  dwExStyle.l
  dwWindowStatus.l
  cxWindowBorders.l
  cyWindowBorders.l
  AtomWindowType.l
  wCreatorVersion.w
EndStructure

handle = FindWindow_("Shell_TrayWnd", 0)
If handle
  
  WindowInfo.WINDOWINFO
  WindowInfo\cbsize = SizeOf(WINDOWINFO)
  If GetWindowInfo_(handle, @WindowInfo)
    MessageRequester("Ex Style", dwExStyle(WindowInfo\dwExStyle))
  EndIf
EndIf
Leo
Beiträge: 420
Registriert: 26.10.2004 18:26

Beitrag von Leo »

Hey cool, thx, scheint zu funktionieren :)
Antworten