2010-10-19 9 views

Répondre

6

Voici un exemple. Fondamentalement, obtenir le Process, puis appelez SetForegroundWindow sur son MainWindowHandle:

using System; 
using System.Diagnostics; 
using System.Linq; 
using System.Runtime.InteropServices; 

namespace StackOverflow.Test 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var proc = Process.GetProcessesByName("notepad").FirstOrDefault(); 
      if (proc != null && proc.MainWindowHandle != IntPtr.Zero) 
        SetForegroundWindow(proc.MainWindowHandle); 
     } 

     [DllImport("user32")] 
     private static extern bool SetForegroundWindow(IntPtr hwnd); 
    } 
} 

Vous devez être conscient des restrictions:

Le système restreint qui traite peut définir la fenêtre de premier plan. Un processus peut régler la fenêtre de premier plan que si l'une des conditions suivantes est remplie:

  • Le processus est le processus de premier plan.
  • Le processus a été démarré par le processus de premier plan.
  • Le processus a reçu le dernier événement d'entrée.
  • Il n'y a pas de processus de premier plan.
  • Le processus de premier plan est en cours de débogage.
  • Le premier plan n'est pas verrouillé (voir LockSetForegroundWindow).
  • Le délai de verrouillage du premier plan a expiré (voir SPI_GETFOREGROUNDLOCKTIMEOUT dans SystemParametersInfo).
  • Aucun menu n'est actif.
+0

Merci beaucoup pour un très détaillé répondre. Je vais essayer de mettre en œuvre cela immédiatement. – ashurexm

+0

Cela semble fonctionner, mais j'ai un problème particulier. Je l'ai posé comme une nouvelle question ici: http://stackoverflow.com/questions/3973532 – ashurexm

0

Vous pouvez commencer par utiliser Process.GetProcesses - cela vous donnera une liste de tous les processus en cours. Examiner les différentes propriétés de chaque processus - cela devrait vous aider à démarrer.

+0

Le problème auquel je suis confronté est comment faire de cette fenêtre de processus la fenêtre active. – ashurexm

0

Payer une application nommée "Autohotkey", elle fait tout ce dont vous avez besoin et vous fait gagner beaucoup de temps de programmation, et c'est gratuit.

Si autohotkey ne résout pas vos problèmes ou si vous faites cela à des fins d'apprentissage, quelqu'un a demandé une application « flambant neuf », etc., il y a des liens qui peuvent être utiles:

Bringing Window to the Front in C# using Win32 API http://social.msdn.microsoft.com/Forums/en-US/vssmartdevicesvbcs/thread/92823775-29f6-4950-bf06-d2f1ca89ec8d (il est dit "fenêtres mobiles" mais peut toujours être utile)

Espérons que cela aide.

+0

J'ai effectivement regardé autohotkey. Il est certainement une application utile, le problème est que cela doit être un type de chose en interne en raison de restrictions de tiers et l'utilisation future prévue (macro entrée basée sur des listes de sélection, etc) – ashurexm

Questions connexes