居中顯示非模態窗口嗨,我正在嘗試找到將窗口移動到用戶顯示中心的最快方法。
模態窗口自動在屏幕上居中,所以我知道 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);腳本視窗回复:顯示中心非模態窗口你的方法是我通常使用的方法。
回复:顯示中心非模態窗口根據我的經驗<<獲取窗口大小方法不可靠。問題是<<獲取窗口大小不返回物理像素,而是返回邏輯像素(受 Windows 顯示縮放影響),而<<移動窗口(x, y)使用物理像素。此外,一般來說,JMP 和<<獲取窗口大小特別是當 Windows 顯示縮放發生變化時不會更新(例如,如果用戶在筆記本電腦上啟動 JMP 並隨後連接顯示器)。
我從 JMP 運行以下 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
回复:顯示中心非模態窗口這是我一直在尋找的那種惡作劇哈哈。 謝謝吉姆和喬丹! 我將嘗試這兩個選項,看看哪個更快和/或更可靠