2011-06-10 61 views
6

對不起,如果這已被問到,但我無法找到答案。我可能不會搜索正確的條款。如何阻止C#控制檯應用程序優先使用活動窗口?

我有一個控制檯程序,需要在後臺運行。用戶需要控制檯保持打開它運行的白色,但需要它在啓動時不成爲活動窗口。他們希望繼續他們目前的工作,而不必在每次啓動時儘量減少控制檯。

該控制檯應用程序運行多次,每次都有一個新的控制檯窗口。我該如何「隱藏」當前正在運行的任務/窗口後面的控制檯?

+0

爲什麼你需要**控制檯窗口可見? – Yuck 2011-06-10 13:32:47

+0

http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/ea8b0fd5-a660-46f9-9dcb-d525cc22dcbd – Gage 2011-06-10 13:33:15

+0

根本沒有GUI會更好嗎?讓它在後臺運行?這可以很容易地完成。 – Phil 2011-06-10 13:47:08

回答

6

您可以通過編程最小化/使用下面的代碼恢復控制檯窗口:

using System; 
using System.IO; 

namespace ConsoleApplication1 
{ 
    class Class1 
    { 
     [System.Runtime.InteropServices.DllImport("user32.dll")] 
     private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); 
     private const int SW_MINIMIZE = 6; 
     private const int SW_MAXIMIZE = 3; 
     private const int SW_RESTORE = 9; 

     [STAThread] 
     static void Main(string[] args) 
     { 
      IntPtr winHandle = 
       System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle; 
      ShowWindow(winHandle, SW_MINIMIZE); 
      System.Threading.Thread.Sleep(2000); 
      ShowWindow(winHandle, SW_RESTORE); 
     } 
    } 
} 

如果您使用的Process.Start啓動控制檯應用程序,更好地利用這一點:

System.Diagnostics.ProcessStartInfo process= new 
    System.Diagnostics.ProcessStartInfo(@"MyApplication.exe"); 
process.WindowStyle=System.Diagnostics.ProcessWindowStyle.Minimized; 
process.UseShellExecute=false; // Optional 
System.Diagnostics.Process.Start(process); 
+0

這正是我所需要的。一旦應用程序啓動,我就會隱藏窗口,並允許用戶繼續執行當前任務。謝謝。 – sange 2011-06-10 13:48:11

+0

不客氣。 – 2011-06-10 13:50:13

1

我不不知道阻止控制檯窗口顯示的方法。控制檯應用程序中的最佳方法是在應用程序加載後立即隱藏窗口。視覺效果是快速打開控制檯窗口,然後消失。也許不是最佳。

更好的方法可能是使用Winexe而不是控制檯應用程序。在Windows應用程序(也許是一個winforms應用程序)內,永遠不要實例化第一種形式。因此不會顯示任何內容。

這可以防止用戶交互,但從您的描述來看,這聽起來就是您想要的。

但我不確定你是否擁有「控制檯應用程序」的控制權。

相關問題