Centrer la fenêtre non modale affichéeBonjour, j'essaie de trouver le moyen le plus rapide de déplacer une fenêtre au centre de l'écran des utilisateurs.
Les fenêtres modales sont automatiquement centrées sur l'écran, donc je sais que JMP est capable de dire où placer une fenêtre, mais je n'ai trouvé que des solutions de contournement relativement lentes pour le faire avec des fenêtres non modales. Vous trouverez ci-dessous le script jsl que j'utilise actuellement pour déterminer la taille de l'écran et centrer une nouvelle fenêtre.
Y at-il un moyen plus rapide? Merci!
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);Automatisation et scriptsles fenêtresRe : Centrer la fenêtre non modale affichéeC’est le genre de tour de passe-passe que je cherchais haha. Merci Jim et Jordan! Je vais essayer les deux options et voir laquelle est la plus rapide et/ou la plus fiable
Re : Centrer la fenêtre non modale affichéeD'après mon expérience, le <<OBTENIR la="" taille="" de="" la="" fenêtre=""></OBTENIR> la méthode n’est pas fiable.Le problème est que <<OBTENIR la="" taille="" de="" la="" fenêtre=""></OBTENIR> ne renvoie pas de pixels physiques mais des pixels logiques (affectés par la mise à l'échelle de l'affichage Windows), tandis que <<DÉPLACER la="" fenêtre=""> utilise des pixels physiques.De plus, JMP en général et<CODE class=" language-jsl"> <<OBTENIR la="" taille="" de="" la="" fenêtre=""></OBTENIR> en particulier, ne se met pas à jour lorsque la mise à l'échelle de l'affichage Windows change (si un utilisateur démarre JMP sur un ordinateur portable et connecte ensuite un moniteur, par exemple).
J'exécute le script PowerShell suivant à partir de JMP pour obtenir la résolution réelle de l'écran et j'utilise ces informations pour placer les fenêtres de manière appropriée (vous devrez lancer PowerShell avec -Contournement de la politique d'exécution :
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 : Centrer la fenêtre non modale affichéeVotre méthode est la méthode que j’utilise habituellement.
Re : Centrer la fenêtre non modale sur l'écranBonjour,
Merci beaucoup pour votre conseil ! Cela fait des années, mais il est toujours d'actualité : comment transférer ces informations de PowerShell vers JMP (concernant la taille de l'écran) avec « Exécuter le programme » ?
Re : Centrer la fenêtre non modale sur l'écranvous pouvez utiliser le texte comme fonction de lecture() et diviser la chaîne en utilisant des mots()
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 ) );
