Centrer la fenêtre non modale sur l'affichageSalut, j'essaie de trouver le moyen le plus rapide de déplacer une fenêtre au centre de l'affichage des utilisateurs.
Les fenêtres modales sont automatiquement centrées sur l'écran, donc je sais que JMP est en quelque sorte 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);Scriptles fenêtresRe : Centrer la fenêtre non modale sur l'écranVotre méthode est la méthode que j'utilise habituellement.
Re : Centrer la fenêtre non modale sur l'écranD'après mon expérience le <<OBTENIR la="" taille="" de="" la="" fenêtre=""></OBTENIR> 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.Aussi, 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 de 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 de JMP pour obtenir la résolution d'écran réelle et utiliser ces informations pour placer les fenêtres comme il convient (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 sur l'écranC'est le genre de hocus pocus 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