Centra la finestra non modale sullo schermoCiao, sto cercando di trovare il modo più veloce per spostare una finestra al centro del display dell'utente.
Le finestre modali vengono centrate automaticamente sullo schermo, quindi so che JMP è in qualche modo in grado di dire dove posizionare una finestra, ma ho trovato solo alcune soluzioni 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.
Esiste 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);Automazione e scriptingfinestreRi: Centra la finestra non modale sul displayQuesto è il tipo di hocus pocus che stavo cercando ahah. Grazie Jim e Giordania! Proverò entrambe le opzioni e vedrò quale è più veloce e/o più affidabile
Ri: Centra la finestra non modale sul displayNella mia esperienza il <<OTTIENI dimensione="" finestra=""></OTTIENI> il metodo non è affidabileIl problema è questo <<OTTIENI dimensione="" 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 dimensione="" 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 nel modo appropriato (dovrai avviare PowerShell con - Bypass della politica di esecuzione :
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
Ri: Centra la finestra non modale sul displayIl tuo metodo è il metodo che utilizzo normalmente.
Re: Centra la finestra non modale sul displayCiao,
Grazie mille per il tuo suggerimento! Sono passati anni, ma è ancora attuale: come si trasferiscono queste informazioni da PowerShell a JMP (sulle dimensioni dello schermo) utilizzando Esegui programma?
Re: Centra la finestra non modale sul displaypuoi usare il testo come funzione Read() e dividere la stringa usando words()
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 ) );
