ディスプレイ上の中央の非モーダルウィンドウこんにちは、私はウィンドウをユーザーディスプレイの中央に移動する最速の方法を見つけようとしています。
モーダルウィンドウは自動的に画面の中央に配置されるため、JMPはウィンドウを配置する場所をなんとかして判断できますが、非モーダルウィンドウでこれを行うには比較的遅い回避策しか見つかりませんでした。 以下は、画面サイズを決定し、新しいウィンドウを中央に配置するために現在使用しているjslスクリプトです。
より速い方法はありますか? ありがとう!
win2 = NewWindow("Test Window");
winSize = win2 << GetWindowSize();
win2 << ShowWindow(0);
testwin = NewWindow("test", << ShowWindow(0));
testwin << Maximize Window(1);
dispsize = testwin << Get Window Size;
testwin << CloseWindow();
win2 << MoveWindow(dispsize[1]/2 - winsize[1]/2, dispsize[2]/2 - winsize[2]/2);
win2 << ShowWindow(1);スクリプティングウィンドウズRe:ディスプレイ上の非モーダルウィンドウを中央に配置あなたの方法は私が通常使う方法です。
Re:ディスプレイ上の非モーダルウィンドウを中央に配置私の経験では<<ウィンドウサイズを取得メソッドは信頼できません。問題はそれです<<ウィンドウサイズを取得物理ピクセルではなく論理ピクセル(Windowsディスプレイのスケーリングの影響を受けます)を返しますが、 <<ウィンドウの移動(x、y)物理ピクセルを使用します。また、JMP全般と<<ウィンドウサイズを取得具体的には、Windowsの表示スケーリングが変更されても更新されません(たとえば、ユーザーがラップトップでJMPを起動し、後でモニターを接続した場合)。
JMPから次のPowerShellスクリプトを実行して実際の画面解像度を取得し、この情報を使用してウィンドウを適切に配置します(PowerShellを起動する必要があります) -ExecutionPolicyバイパス:
Add-Type @"
using System;
using System.Runtime.InteropServices;
public class PInvoke {
[DllImport("user32.dll")] public static extern IntPtr GetDC(IntPtr hwnd);
[DllImport("gdi32.dll")] public static extern int GetDeviceCaps(IntPtr hdc, int nIndex);
}
"@
$hdc = [PInvoke]::GetDC([IntPtr]::Zero)
[PInvoke]::GetDeviceCaps($hdc, 118) # width
[PInvoke]::GetDeviceCaps($hdc, 117) # height
Re:ディスプレイ上の非モーダルウィンドウを中央に配置これは私が探していた一種のホーカスポカスです。 ジムとジョーダンに感謝します! 両方のオプションを試して、どちらがより高速で信頼性が高いかを確認します