Source wurde am 15.07.2007 aus der MMJ-Quellcodesammlung (Dietmar Horn) in die Babyklappe auf XProfan.Com abgelegt:
Hauptfenster: Fenstereigenschaften per API bestimmen (auch Client-Bereich)
Die wichtigsten Infos zu Positionen
Def GetWindowPos(2) ! USER32, GetWindowRect
DEF GetClientPos(2) ! USER32,GetClientRect
Def SHTaskbarheight(2) ! SHELL32,SHAppBarMessage
Def SHTaskbarPos(2) ! SHELL32,SHAppBarMessage
DEF SPIUsableScreen(4) ! user32,SystemParametersInfoA
DEF MoveWindow(6) ! USER32,MoveWindow
Def GetCursorPos(1) ! USER32,GetCursorPos
DEF SetcursorPos(2) ! USER32,SetCursorPos
DEF ScreenToClient(2) ! USER32,ScreenToClient
DEF ClientToScreen(2) ! USER32,ClientToScreen
DEF SetWindowPos(7) ! USER32,SetWindowPos
Declare rect#,xpos&,ypos&,xRpos&,yRpos&
proc GetwindowPos
Parameters hndl&
case equ(%pcount,0):let hndl&=@getactiveWindow()
DIM rect#,16
GetWindowPos(hndl&,rect#)
let xpos&=@long(rect#,0) links oben
let ypos&=@long(rect#,4)
let xRpos&=@long(rect#,8) rechts unten
let yRpos&=@long(rect#,12)
Clear rect#
Dispose rect#
endproc
Proc GetClientPos
Parameters hndl&
case equ(%pcount,0):let hndl&=@getactiveWindow()
Dim Rect#,16
GetClientPos(hndl&,Rect#)
let xpos&=@long(rect#,0) links oben
let ypos&=@long(rect#,4)
let xRpos&=@long(rect#,8) rechts unten
let yRpos&=@long(rect#,12)
Clear rect#
Dispose Rect#
endproc
Proc GetTaskbarHeight
Dim rect#,36
Declare height&
Long rect#,0=36
SHTaskbarheight(5,rect#)
Let height&=Long(rect#,28)
Let height&=Sub(height&,Long(rect#,20))
Clear rect#
Dispose rect#
Return height&
EndProc
Proc GetTaskbarPos
Dim rect#,36
Declare pos&
Long rect#,0=36
SHTaskbarPos(5,rect#)
Let pos&=Long(rect#,12)
Clear rect#
Dispose rect#
Return pos&
endproc
Proc UsableScreen
Dim Rect#,16
SPIUsableScreen(48,0,Rect#,0)
let xpos&=@long(rect#,0) links oben
let ypos&=@long(rect#,4)
let xRpos&=@long(rect#,8) rechts unten
let yRpos&=@long(rect#,12)
Clear rect#
Dispose Rect#
endproc
Proc MoveWindow
Parameters Hndl&,x%,y%,Xl%,Yh%
MoveWindow(hndl&,x%,y%,xl%,yh%,1) 1=repaint the Window
endproc
Proc Getcursor
Parameters from%,hndl& from% 0=screen größer 0 = Window
case equ(%Pcount,1):let hndl&=GetactiveWindow()
Dim rect#,8
Getcursorpos(rect#)
case gt(from%,0):ScreenToClient(hndl&,rect#)
xpos&=@long(rect#,0)
ypos&=@long(rect#,4)
clear rect#
Dispose rect#
endproc
proc setcursor
parameters x&,y&,where%,hndl& where% 0=screen, größer 0 =window
case equ(%Pcount,3):let hndl&=GetactiveWindow()
If equ(where%,0)
Setcursorpos(x&,y&)
else
Dim rect#,8
Long rect#,0=x&
Long rect#,4=y&
ClientToScreen(hndl&,rect#)
Setcursorpos(@long(rect#,0),@long(rect#,4))
clear rect#
Dispose rect#
endif
endproc
proc setwindow
Parameters hndl&,zorder&,x&,y&,xl&,yh&,swp&
SetWindowPos(hndl&,zorder&,x&,y&,xl&,yh&,swp&)
endproc
Beispiel
cls
Movewindow %hwnd,50,50,700,500
GetWindowPos
Print WindowPosition
Print Linke obere Ecke: ,xpos&;,;ypos&
Print Rechte untere Ecke:,Xrpos&;,;yRpos&
GetclientPos
Print InnerWindow
Print Linke obere Ecke: ,xpos&;,;ypos&
Print Rechte untere Ecke:,Xrpos&;,;yRpos&
UsableScreen
print Nutzbarer Bildschirm
Print Linke obere Ecke: ,xpos&;,;ypos&
Print Rechte untere Ecke:,Xrpos&;,;yRpos&
GetTaskbarPos
case Equ(@&(0),0):Print Die Taskbar ist links
case Equ(@&(0),1):Print Die Taskbar ist oben
case Equ(@&(0),2):Print Die Taskbar ist rechts
case Equ(@&(0),3):Print Die Taskbar ist unten
GetTaskbarHeight
Print Taskbarhöhe =,@&(0),Pixel
setcursor 50,50,1
Getcursor 1
Print Cursorposition= ,xpos&,,ypos&
setwindow %hwnd,0,60,60,700,500,256
waitinput
end
Werte für SetWindowPos
HWND_BOTTOM = 1
Letztes Window in der Schlange (Z-order)
HWND_NOTOPMOST = -2
Legt das Fenster unter alle topmost Fenster und überhalb der non topmost Fenster
HWND_TOP = 0
Legt das Fenster an die Spitze der Schlange (Z-order)
HWND_TOPMOST = -1
Macht das Fenster permanent topmost (über allen anderen Fenstern)
wFlags
Null oder mehr der folgenden Flags geben an, wie das Fenster zu bewegen ist
SWP_DRAWFRAME = $20 =32
das gleiche als SWP_FRAMECHANGED.
SWP_FRAMECHANGED = $20 =32
Volles neuzeichen des Fensters an der neuen Position
SWP_HIDEWINDOW = $80 =128
Fenster verstecken
SWP_NOACTIVATE = $10 = 16
Macht das Fenster nicht aktiv nach dem Bewegen, es sei denn
es war schon das aktive Fenster
SWP_NOCOPYBITS = $100 = 256
Es wird nicht neugezeichnet nach dem Bewegen, das heißt der gesamte Inhalt
ist gelöscht.
SWP_NOMOVE = $2 = 2
Das Fenster wird nicht bewegt
SWP_NOSIZE = $1 = 1
Das Fenster bekommt keine neue Größe
SWP_NOREDRAW = $8 =8
Entfernt nicht die Abbildung des Fenster an seiner bisherigen Position
es hinterläßt ein Geisterbild auf dem Bildschirm
SWP_NOZORDER = $4 =4
Wechselt nicht die Position in der Schlange (Z-order)
SWP_SHOWWINDOW = $40 = 64
Das Fenster ist versteckt
SWP_NOOWNERZORDER = $200 = 512