2009-06-05 26 views
5

ウィンドウを移動するための簡単なAutoHotkeyスクリプトを作成しようとしていますが、正しい画面サイズの値を取得できません。オートホットキーで利用可能な画面領域を取得する

私は画面上の使用可能な領域のサイズを取得しようとしています(通常、フルスクリーン解像度からタスクバーを差し引いたもので、Vistaのサイドバーのような他のドッキングされたウィンドウ)。画面幅を取得するために私が見つけた方法のどちらも機能していないようです。

私が画面サイズを得るために見つけた3つの方法のどれも、私に正しい値を与えていません。ここで私は(そのデフォルトのサイズで、下部のタスクバーにXP上で実行されている)を使用していたテストスクリプトがあります:

#7:: 
WinMove A,,0,0,A_ScreenWidth,A_ScreenHeight 
return 

#8:: 
;SM_CXMAXIMIZED and SM_CYMAXIMIZED 
SysGet, ScreenWidth, 61 
SysGet, ScreenHeight, 62 
WinMove A,,0,0,ScreenWidth,ScreenHeight 
return 

#9:: 
;SM_CXFULLSCREEN and SM_CYFULLSCREEN 
SysGet, ScreenWidth, 16 
SysGet, ScreenHeight, 17 
WinMove A,,0,0,ScreenWidth,ScreenHeight 
return 

#7は、ウィンドウが全体の解像度を取るになりますので、タスクバーに重なっています。

#8は、解像度(ウィンドウの右端がセカンダリモニタに表示される)よりも大きく、高さが少し大きすぎるため、ウィンドウがタスクバー領域と部分的に重なってしまいます。このように見えるのは、エッジのウィンドウ装飾を考慮しない点を除いて正しいことです。

#9は正しい幅を持っているようですが、高さが短すぎます。解像度の高さからタスクバーの高さを差し引いたものの、そこから30ピクセルを差し引いたようです。

#9で使用したものを使用して30の高さを追加することはできますが、それは他の設定で破損するハックのように感じられます。利用可能な画面サイズを適切に取得する方法が必要なようですが、AutoHotkeyで見つけることはできません。参考のため

、これは私がJavaで必要なものを私に与えているようだ:

Toolkit.getDefaultToolkit().getScreenSize(); 

答えて

4

私はXPで働いて何かを得ました。現在のところ、タスクバーのみを考慮しているため、サイドバーが表示されているときにVistaで適切な処理が行われない可能性があります。ただし、ツールバーの場所に関係なく機能します。

; Gets the edge that the taskbar is docked to. Returns: 
; "top" 
; "right" 
; "bottom" 
; "left" 
GetTaskbarEdge() { 
    WinGetPos,TX,TY,TW,TH,ahk_class Shell_TrayWnd,,, 

    if (TW = A_ScreenWidth) { ; Vertical Taskbar 
    if (TY = 0) { 
     return "top" 
    } else { 
     return "bottom" 
    } 
    } else { ; Horizontal Taskbar 
    if (TX = 0) { 
     return "left" 
    } else { 
     return "right" 
    } 
    } 
} 

GetScreenTop() { 
    WinGetPos,TX,TY,TW,TH,ahk_class Shell_TrayWnd,,, 
    TaskbarEdge := GetTaskbarEdge() 

    if (TaskbarEdge = "top") { 
    return TH 
    } else { 
    return 0 
    } 
} 

GetScreenLeft() { 
    WinGetPos,TX,TY,TW,TH,ahk_class Shell_TrayWnd,,, 
    TaskbarEdge := GetTaskbarEdge() 

    if (TaskbarEdge = "left") { 
    return TW 
    } else { 
    return 0 
    } 
} 

GetScreenWidth() { 
    WinGetPos,TX,TY,TW,TH,ahk_class Shell_TrayWnd,,, 
    TaskbarEdge := GetTaskbarEdge() 

    if (TaskbarEdge = "top" or TaskbarEdge = "bottom") { 
    return A_ScreenWidth 
    } else { 
    return A_ScreenWidth - TW 
    } 
} 

GetScreenHeight() { 
    WinGetPos,TX,TY,TW,TH,ahk_class Shell_TrayWnd,,, 
    TaskbarEdge := GetTaskbarEdge() 

    if (TaskbarEdge = "top" or TaskbarEdge = "bottom") { 
    return A_ScreenHeight - TH 
    } else { 
    return A_ScreenHeight 
    } 
} 

ResizeAndCenter(w, h) 
{ 
    ScreenX := GetScreenLeft() 
    ScreenY := GetScreenTop() 
    ScreenWidth := GetScreenWidth() 
    ScreenHeight := GetScreenHeight() 

    WinMove A,,ScreenX + (ScreenWidth/2)-(w/2),ScreenY + (ScreenHeight/2)-(h/2),w,h 
} 
+0

これらの機能は非常に便利です。ちょうどWindows 7の下でそれらを使用し、彼らは美しく動作します。ありがとう。乾杯! –

2

あなたはSysGetのMonitorWorkAreaサブコマンドを使用してみました:ここ

は、それらの使用を示して簡単なResizeAndCenter方法と一緒に、私が作成した方法は、ありますか?
http://www.autohotkey.com/docs/commands/SysGet.htm

関連する問題