Posts: 1,271
Threads: 399
Joined: Mar 2003
how can i set desktop areas with qm ?
these areas must be dominant, so that every! window maximizes only
to the given value.
i don't use explorer as windows shell, but the information about where
the windows taskbar was placed last is for some programs resistand.
mmh, maybe its only a reg key to manipulate ?
Posts: 12,073
Threads: 140
Joined: Dec 2002
[color=green];warning: this may reorder desktop icons[/color]
[color=blue]def [/color]SPI_SETWORKAREA 47
[color=blue]def [/color]SPIF_SENDCHANGE 0x2
[color=blue]def [/color]SPIF_UPDATEINIFILE 0x1
RECT r
r.left=200
r.right=ScreenWidth-200
r.bottom=ScreenHeight-25
SystemParametersInfo(SPI_SETWORKAREA 0 &r SPIF_SENDCHANGE)
[color=green];to restore, drag taskbar to some other edge
[/color]
Posts: 1,271
Threads: 399
Joined: Mar 2003
1
key Wm
1
max _hwndqm
;:)
what is key Wm doing ? it's unmapped when using bblean.
can this be extented to two screens ?
Posts: 12,073
Threads: 140
Joined: Dec 2002
From MSDN:
Quote:Sets the size of the work area. The work area is the portion of the screen not obscured by the system taskbar or by application desktop toolbars. The pvParam parameter is a pointer to a RECT structure that specifies the new work area rectangle, expressed in virtual screen coordinates. In a system with multiple display monitors, the function sets the work area of the monitor that contains the specified rectangle.
If pvParam is NULL, the function sets the work area of the primary display monitor to the full screen.
Posts: 1,271
Threads: 399
Joined: Mar 2003
do i get you right ?
RECT screen1
screen1.left=24
screen1.top=19
screen1.right=1600
screen1.bottom=1200
SystemParametersInfo(SPI_SETWORKAREA 0 &screen1 SPIF_SENDCHANGE)
RECT screen2
screen2.left=0
screen2.top=19
screen2.right=1200
screen2.bottom=768
SystemParametersInfo(SPI_SETWORKAREA 1 &screen2 SPIF_SENDCHANGE)
SystemParametersInfo
Posts: 12,073
Threads: 140
Joined: Dec 2002
I didn't tested, but I think you aren't right. Virtual screen surrounds all monitors. Coordinate 0,0 is at top-left of primary monitor. For example, if second monitor is mapped above, then screen2.top should be -748, and screen2.bottom = 0. Second argument should be always 0, and monitor is selected automatically, based on given coordinates. But maybe I'm not right.
To get monitor coordinates, use GetMonitorInfo. To get monitor handle, use EnumDisplayMonitors or some other function from this family.
Posts: 1,271
Threads: 399
Joined: Mar 2003
wow. i discover a new world
hock:
http://msdn.microsoft.com/library/defau ... etrics.asp
int i = GetSystemMetrics(SM_CXFULLSCREEN)
out i
:!:
Posts: 1,271
Threads: 399
Joined: Mar 2003
old thread but similar question.
how do i tell all windows on my second screen to maximize only to a given area?
windows till vista (have not checked on Seven) has the stupid bug,
where when taskbar is on top and also set to stay on top,
that many windows still start on 0 0.
so their whole caption bar is under the taskbar.
i still have an old qm solution enabled where i press win+Arrow to move the active window.
for a while i had a trigger for every new window,
checking if it is on y under taskbar height and moved it then.
i have seen a tool for something similar.
how do i set desktop areas for individual programs?
like firefox is only allowed to maximize to 1500*1000.
Posts: 12,073
Threads: 140
Joined: Dec 2002
For all programs - set work area. If it is what you need but you don't know how, I'll try to give example.
For some programs - don't know. Use triggers or timers.
Posts: 1,271
Threads: 399
Joined: Mar 2003
Gintaras Wrote:For all programs - set work area. If it is what you need but you don't know how, I'll try to give example.
For some programs - don't know. Use triggers or timers.
an example how to set different work areas for 2 screens would be cool.
1: 20 26 1400 1050
2: 80 50 1000 1100
Posts: 12,073
Threads: 140
Joined: Dec 2002
Function
SetWorkArea
;/
function monitor marginLeft marginTop marginRigt marginBottom [flags] ;;flags: 1 resize maximized windows
;Sets work area. It is the area where windows are maximized.
;monitor - 0 primary, 1-30 index, -1 mouse, -2 active window, -3 primary, or window handle.
;marginX - margin width in pixels.
RECT r
int hmon=MonitorFromIndex(monitor 0 &r)
r.left+marginLeft
r.top+marginTop
r.right-marginRigt
r.bottom-marginBottom
if(!SystemParametersInfo(SPI_SETWORKAREA 0 &r SPIF_SENDCHANGE)) ret
if(flags&1)
,ARRAY(int) a; int i
,win "" "" "" 0 0 0 a
,for i 0 a.len
,,int h=a[i]
,,if(!max(h) or MonitorFromWindow(h 0)!=hmon) continue
,,res h; max h