居中显示非模态窗口嗨,我正在尝试找到将窗口移动到用户显示中心的最快方法。
模态窗口自动在屏幕上居中,所以我知道 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
回复:显示中心非模态窗口这是我一直在寻找的那种恶作剧哈哈。 谢谢吉姆和乔丹! 我将尝试这两个选项,看看哪个更快和/或更可靠