2009-11-05 3 views
2

j'ai un code assez simple d'ouvrir des fichiers en utilisant un objet processus:fenêtre pour un processus de démarrage en C# montre derrière mes fenêtres ouvertes actuelles

 var proc = new Process(); 
     proc.StartInfo.FileName = attachmentPath; 
     proc.StartInfo.UseShellExecute = true; 
     proc.Start(); 

Chaque fois que dans un certain temps, la fenêtre ouvre à partir de ce processus en commençant ouvert derrière toutes mes fenêtres actuellement ouvertes. Je ne vois aucun motif ou cohérence sur la raison pour laquelle cela se produit. Est-ce que quelqu'un a une idée de ce qui se passe, ou comment je peux contourner cela? Merci!

Répondre

1

Windows a découragé les applications de dérober le focus pendant un certain temps; les règles qui l'entourent ne sont pas vraiment documentées, vraisemblablement pour empêcher les applications de fonctionner autour d'elles.

Cependant, vous pouvez essayer ce:

var proc = new Process(); 
    proc.StartInfo.FileName = attachmentPath; 
    proc.StartInfo.UseShellExecute = true; 
    proc.Start(); 

    //Wait for window to spin up 
    proc.WaitForInputIdle(); 
    BringWindowToTop(proc.MainWindowHandle); 

Define BringWindowToTop avec p/invoke.

+0

Les règles permettant de définir la mise au point sont documentées. Voir http://msdn.microsoft.com/en-us/library/ms632668%28VS.85%29.aspx – shf301

+0

C'est pour SetForegroundWindow, pas tellement pour la fenêtre d'un nouveau processus. Cela étant dit, bon lien qui montre ce que Microsoft vise. –

Questions connexes