2010-10-25 5 views
3

Est-il possible de détecter si une application possède une fenêtre de console? Soit en utilisant AllocConsole ou si c'est une application console normale.Détecter la fenêtre de la console?

Edit:

Solution (grâce à la réponse de HO1):

public static class ConsoleDetector 
{ 
    private const uint ATTACH_PARENT_PROCESS = 0x0ffffffff; 
    private const int ERROR_ACCESS_DENIED = 5; 
    [DllImport("kernel32.dll", SetLastError = true)] 
    private static extern bool AttachConsole(uint dwProcessId); 
    [DllImport("kernel32", SetLastError = true)] 
    private static extern bool FreeConsole(); 


    /// <summary> 
    /// Gets if the current process has a console window. 
    /// </summary> 
    public static bool HasOne 
    { 
     get 
     { 
      if (AttachConsole(ATTACH_PARENT_PROCESS)) 
      { 
       FreeConsole(); 
       return false; 
      } 

      //If the calling process is already attached to a console, 
      // the error code returned is ERROR_ACCESS_DENIED 
      return Marshal.GetLastWin32Error() == ERROR_ACCESS_DENIED; 
     } 
    } 
} 
+0

Lorsque vous parlez de la fenêtre de console, faites-vous référence à une application de console ou simplement à une fenêtre? –

+0

N'est-ce pas évident? Tout d'abord, j'ai mentionné la méthode AllocConsole puis j'ai écrit "application console" dans ma question. Enfin ho1 a donné une réponse mentionnant AttachConsole :) – jgauffin

Répondre

3

probablement d'une certaine façon plus propre de le faire, mais je suppose que vous pourriez appeler AttachConsole et vérifier si elle échoue avec ERROR_INVALID_HANDLE (qui ce sera le cas si le processus n'a pas de console) ou non.

Questions connexes