c # .Comment s’assurer que la fenêtre de processus lancée par Process.Start (ProcessStartInfo) a pour object tous les formulaires? Merci,
L’utilisation de SetForegroundWindow
et d’autres méthodes de définition du focus est soumise à de nombreuses ressortingctions. Si vous voulez vraiment être sûr que le processus démarré recevra le focus, je vous recommande d’utiliser les fonctions natives (non gérées) suivantes
SystemParametersInfo (SPI_GETFOREGROUNDLOCKTIMEOUT, 0, (PVOID)&dwLockedTimeout, 0); SystemParametersInfo (SPI_SETFOREGROUNDLOCKTIMEOUT, 0, (PVOID)0, SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE);
avant le démarrage et la restauration du processus
SystemParametersInfo (SPI_SETFOREGROUNDLOCKTIMEOUT, 0, (PVOID)&dwLockedTimeout, SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE);
à la fin. Un appel comme
WaitForInputIdle (pi.hProcess, 5000);
après le démarrage du programme et avant la restauration de SPI_SETFOREGROUNDLOCKTIMEOUT
peut également être utile si vous rencontrez des problèmes avec
Process.Start renvoie un object Process. Pour donner le focus au processus, configurez d’abord le PInvoke suivant:
[DllImport("user32.dll")] static extern bool SetForegroundWindow(IntPtr hWnd);
Ensuite, utilisez:
MyProcess = Process.Start(ProcessStartInfo); SetForegroundWindow(MyProcess.MainWindowHandle);