Come garantire che la finestra del processo avviata da Process.Start (ProcessStartInfo) abbia il focus su tutti i moduli?

c # .Come garantire che la finestra del processo avviata da Process.Start (ProcessStartInfo) abbia il focus su tutti i moduli? Grazie,

L’utilizzo di SetForegroundWindow e altri metodi di impostazione del focus ha molte limitazioni. Se si vuole essere sicuri, che il processo avviato riceverà attenzione, vi consiglio di utilizzare le seguenti funzioni native (non gestite)

 SystemParametersInfo (SPI_GETFOREGROUNDLOCKTIMEOUT, 0, (PVOID)&dwLockedTimeout, 0); SystemParametersInfo (SPI_SETFOREGROUNDLOCKTIMEOUT, 0, (PVOID)0, SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE); 

prima dell’avvio e del ripristino del processo

 SystemParametersInfo (SPI_SETFOREGROUNDLOCKTIMEOUT, 0, (PVOID)&dwLockedTimeout, SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE); 

alla fine. Una chiamata come

 WaitForInputIdle (pi.hProcess, 5000); 

dopo l’avvio del programma e prima del ripristino di SPI_SETFOREGROUNDLOCKTIMEOUT può essere utile anche se si avranno problemi con l’immediato

Process.Start restituisce un object Process. Per focalizzare il processo, imposta innanzitutto il seguente PInvoke:

 [DllImport("user32.dll")] static extern bool SetForegroundWindow(IntPtr hWnd); 

Quindi, utilizzare:

 MyProcess = Process.Start(ProcessStartInfo); SetForegroundWindow(MyProcess.MainWindowHandle);