Centrar ventana no modal en pantallaHola, estoy intentando encontrar la forma más rápida de mover una ventana al centro de la pantalla del usuario.
Las ventanas modales se centran automáticamente en la pantalla, por lo que sé que JMP de alguna manera puede decir dónde colocar una ventana, pero solo he encontrado algunas soluciones alternativas relativamente lentas para hacer esto con ventanas no modales. A continuación se muestra el script jsl que estoy usando actualmente para determinar el tamaño de la pantalla y centrar una nueva ventana.
¿Hay una manera mas rápida? ¡Gracias!
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);Automatización y secuencias de comandosventanasRe: Centrar ventana no modal en pantallaEste es el tipo de hocus pocus que estaba buscando jaja. ¡Gracias Jim y Jordan! Probaré ambas opciones y veré cuál es más rápida y/o más confiable.
Re: Centrar ventana no modal en pantallaEn mi experiencia el <<OBTENER tamaño="" de="" ventana=""></OBTENER> El método no es confiable.La cuestión es que <<OBTENER tamaño="" de="" ventana=""></OBTENER> no devuelve píxeles físicos sino píxeles lógicos (afectados por la escala de visualización de Windows), mientras que <<MOVER ventana=""> utiliza píxeles físicos.Además, JMP en general y<CODE class=" language-jsl"> <<OBTENER tamaño="" de="" ventana=""></OBTENER> en específico, no se actualiza cuando cambia la escala de visualización de Windows (si un usuario inicia JMP en una computadora portátil y luego conecta un monitor, por ejemplo).
Ejecuto el siguiente script de PowerShell desde JMP para obtener la resolución de pantalla real y uso esta información para colocar Windows según corresponda (tendrás que iniciar PowerShell con -Omisión de política de ejecución :
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: Centrar ventana no modal en pantallaTu método es el método que uso normalmente.
Re: Centrar ventana no modal en la pantallaHola,
¡Muchas gracias por tu consejo! Han pasado años, pero sigue vigente: ¿cómo se transfiere esta información de PowerShell a JMP (sobre el tamaño de la pantalla) usando Ejecutar programa?
Re: Centrar ventana no modal en la pantallaPuedes usar texto como función de lectura() y dividir la cadena usando palabras()
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 ) );
