2

タイトルが示すように、ユーザーが最大化された状態から復元したときに、最大化された親ウィンドウが再描画される場所を見つけようとしています。現在、winRestore コマンドを使用してこれを実行し、位置をキャプチャしてから再度 winMaximise を実行できますが、これにより、ウィンドウが a) 2 回描画されるためフラッシュし、b) インスタントにしたいプロセスに時間がかかりすぎます。ユーザーに(後でウィンドウを別の画面に移動するときに復元された位置を使用します)。

GetWindowsPlacement Windows API メソッドを使用して正しい道を進んでいると確信していますが、必要な情報を取得する方法を理解することは、現在の dllCalling コーディング能力と Google 検索を超える一歩であることを認めます。何も起きません。

一言で言えば、私ができるようにしたいのは、最大化されたウィンドウを実際に再描画して移動することなく、任意のウィンドウの復元された位置の左上座標を (Windows ウィンドウ管理システムに) 取得して設定することです。

私がたどることができる方向またはポインターを誰かが持っていますか? ありがとう!

4

1 に答える 1

1

ユーザーLexikosは、GetWindowPlacement への DLL 呼び出しでそれを行う方法を示しています。

http://www.autohotkey.com/forum/post-172836.html#172836

hwnd := WinExist("Untitled - Notepad")
WinGetPos, mX, mY
WinGetNormalPos(hwnd, x, y, w, h)
MsgBox Pos:`nx: %mX%`ny: %mY%`n`nNormalPos:`nx: %x%`ny: %y%`nw: %w%`nh: %h%

WinGetNormalPos(hwnd, ByRef x, ByRef y, ByRef w="", ByRef h="")
{
    VarSetCapacity(wp, 44), NumPut(44, wp)
    DllCall("GetWindowPlacement", "uint", hwnd, "uint", &wp)
    x := NumGet(wp, 28, "int")
    y := NumGet(wp, 32, "int")
    w := NumGet(wp, 36, "int") - x
    h := NumGet(wp, 40, "int") - y
}
于 2010-12-30T19:28:57.473 に答える