Centra la finestra non modale sul displayCiao, sto cercando di trovare il modo più veloce per spostare una finestra al centro del display degli utenti.
Le finestre modali sono automaticamente centrate sullo schermo, quindi so che JMP è in qualche modo in grado di dire dove mettere una finestra, ma ho trovato solo alcune soluzioni alternative relativamente lente per farlo con finestre non modali. Di seguito è riportato lo script jsl che sto attualmente utilizzando per determinare le dimensioni dello schermo e centrare una nuova finestra.
C'è un modo più veloce? Grazie!
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);SceneggiaturafinestreRe: Centra la finestra non modale sul displayIl tuo metodo è il metodo che uso normalmente.
Re: Centrare la finestra non modale sul displayNella mia esperienza il <<OTTIENI le="" dimensioni="" della="" finestra=""></OTTIENI> il metodo non è affidabileIl problema è quello <<OTTIENI le="" dimensioni="" della="" finestra=""></OTTIENI> non restituisce pixel fisici ma pixel logici (influenzati dal ridimensionamento dello schermo di Windows), mentre <<SPOSTA finestra=""> utilizza pixel fisici.Inoltre, JMP in generale e<CODE class=" language-jsl"> <<OTTIENI le="" dimensioni="" della="" finestra=""></OTTIENI> in particolare non si aggiorna quando il ridimensionamento dello schermo di Windows cambia (se un utente avvia JMP su un laptop e successivamente collega un monitor, ad esempio).
Eseguo il seguente script PowerShell da JMP per ottenere la risoluzione effettiva dello schermo e utilizzo queste informazioni per posizionare le finestre in modo appropriato (dovrai avviare PowerShell con -ExecutionPolicy Bypass :
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: Centra la finestra non modale sul displayQuesto è il tipo di hocus pocus che stavo cercando ahah. Grazie Jim e Jordan! Proverò entrambe le opzioni e vedrò quale è più veloce e/o più affidabile