Comment puis-je savoir si l'utilisateur a lancé l'application de console en double-cliquant sur le fichier EXE (ou un raccourci) ou si une fenêtre de ligne de commande était déjà ouverte et exécutée dans cette session?Comment pouvez-vous déterminer comment une application de console a été lancée?
Répondre
Vous pourriez être en mesure de le comprendre par P/Appel à la fonction Win32 GetStartupInfo().
[DllImport("kernel32", CharSet=CharSet.Auto)]
internal static extern void GetStartupInfo([In, Out] STARTUPINFO lpStartupInfo);
bâton ce champ statique dans votre « Program
» classe pour assurer qu'il fonctionne avant toute sortie:
static bool StartedFromGui =
!Console.IsOutputRedirected
&& !Console.IsInputRedirected
&& !Console.IsErrorRedirected
&& Environment.UserInteractive
&& Environment.CurrentDirectory == System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location)
&& Console.CursorTop == 0 && Console.CursorLeft == 0
&& Console.Title == Environment.GetCommandLineArgs()[0]
&& Environment.GetCommandLineArgs()[0] == System.Reflection.Assembly.GetEntryAssembly().Location;
Ceci est un peu overkill/paranoïaque, mais capte être démarré à partir de l'Explorateur sans répondre à des choses comme cls && app.exe
(en vérifiant le chemin complet) ou même cls && "f:\ull\path\to\app.exe"
(en regardant le titre). J'ai eu l'idée de win32 version of this question.
J'ai ajouté un deuxième champ 'statique bool startedFromVisualStudio = \t \t \t \t! Console.IsOutputRedirected \t \t \t \t &&! Console.IsInputRedirected \t \t \t \t &&! Console.IsErrorRedirected \t \t \t \t && Environment.UserInteractive \t \t \t \t && Environment.CurrentDirectory == System.IO.Path.GetDirectoryName (System.Reflection.Assembly.GetEntryAssembly(). Situation) \t \t \t \t && Console.CursorTop == 0 && Console.CursorLeft == 0 \t \t \t \t && Environment.GetCommandLineArgs() [0] .Contains ("vshost"); 'pour attendre également une pression sur une touche à partir de VS – JCH2k
duplication possible de [Une application de console Win32 peut-elle détecter si elle a été exécutée à partir de l'explorateur ou non?] (Http://stackoverflow.com/questions/510805/can-a-win32-console-application-detect- si-it-has-been-run-de-la-explorateur ou non) – joshuapoehls