2010-08-20 144 views
4

如何判斷用戶是否通過雙擊EXE(或快捷方式)啓動了我的控制檯應用程序,或者是否已經打開了命令行窗口並在該會話中執行了我的控制檯應用程序?如何確定如何啓動控制檯應用程序?

+2

[Win32控制檯應用程序是否可以檢測是否已從資源管理器運行?](http://stackoverflow.com/questions/510805/can-a-win32-console-application-detect-如果-IT-過氣 - 運行 - 從 - - 探險家或否) – joshuapoehls 2010-08-20 01:25:16

回答

1

您可能可以通過P /調用Win32 GetStartupInfo()函數來計算出結果。

[DllImport("kernel32", CharSet=CharSet.Auto)] 
internal static extern void GetStartupInfo([In, Out] STARTUPINFO lpStartupInfo); 
7

棒在你的「Program」類此靜態字段,以確保它運行的任何輸出前:

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; 

這是一個有點矯枉過正/偏執,而是拿起從資源管理器正在啓動,而不是對cls && app.exe(通過檢查完整路徑)或甚至cls && "f:\ull\path\to\app.exe"(通過查看標題)做出響應。

我從win32 version of this question得到了主意。

+0

我加入了第二場'靜態布爾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()位置) \t \t \t \t && Console.CursorTop == 0 && Console.CursorLeft == 0 \t \t \t \t && Environment.GetCommandLineArgs()[0] .Contains(「vshost」);'當從VS啓動時也等待按鍵 – JCH2k 2016-08-03 09:33:20

相關問題