非モーダルウィンドウを中央に表示こんにちは。ウィンドウをユーザーディスプレイの中央に移動する最速の方法を見つけようとしています。
モーダル ウィンドウは自動的に画面の中央に配置されるため、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 を起動する必要があります) -実行ポリシーのバイパス:
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: 非モーダルウィンドウを中央に表示あなたの方法は私が通常使用する方法です。
Re: 非モーダルウィンドウをディスプレイの中央に配置するこんにちは、
アドバイスをありがとうございます!何年も前のことですが、今でも参考になる質問です。「プログラム実行」を使って、PowerShellからJMPに画面サイズに関する情報を転送するにはどうすればいいでしょうか?
Re: 非モーダルウィンドウをディスプレイの中央に配置するテキストを読み取り関数()として使用し、 words()を使用して文字列を分割することができます。
powershell_code ="
Add-Type -AssemblyName System.Windows.Forms
$primary = [System.Windows.Forms.Screen]::PrimaryScreen
Write-Output $primary.Bounds.Width
Write-Output $primary.Bounds.Height
";
result = Run Program(
Executable( "powershell.exe" ),
Options( {"-Command", powershell_code} ),
Read Function( "text" )
);
{w, h} = Transform Each( {str}, Words( result, "\!n\!r" ), Num( str ) );
