使我的控制台应用程序不可见

时间:2010-08-16 21:46:21

标签: c# console-application invisible

我正在为我的公共图书馆开发一个控制台应用程序作为学校项目。一旦用户登录并执行一些后台工作,控制台应用程序就会立即运行。

问题是,我不希望控制台应用程序真正出现。我需要它隐形。我需要的最后一件事就是投诉,因为有些人因为CMD窗口打开和关闭而感到害怕,除了图书馆希望它尽可能不可见。

我尝试按照此主题中的代码进行操作: http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/ea8b0fd5-a660-46f9-9dcb-d525cc22dcbd

但无济于事,我仍然可以看到控制台应用程序在完成所有工作后弹出和关闭。

是否有更好的方法可以阻止控制台出现?感谢。

6 个答案:

答案 0 :(得分:37)

最好的办法就是不要将其编译为控制台应用程序!将其编译为Windows EXE,不会显示任何控制台。然后,您可以在Main方法中执行任何操作,而无需显示UI。

但无论如何,如果你必须隐藏/显示控制台窗口,我将避免使用FindWindow执行此任务,因为有一个更可靠的API:GetConsoleWindow。这将为您提供控制台窗口的HWND,您可以尝试将其传递给ShowWindow。

答案 1 :(得分:16)

由于Josh Einstein建议你可以使用ShowWindow Api来隐藏你的窗口。

以下是一个例子:

using System.Runtime.InteropServices

class CommandLine
{

    [DllImport("user32.dll")]
    static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

    [DllImport("Kernel32")]
    private static extern IntPtr GetConsoleWindow();

    const int SW_HIDE=0;
    const int SW_SHOW=5;

    static void Main(string[] args)
    {
         IntPtr hwnd;
         hwnd=GetConsoleWindow();
         ShowWindow(hwnd,SW_HIDE);

         //Your logic goes here
    }
}

我不确定这段代码,因为我还没有测试过。如果您遇到任何问题,请告诉我。

答案 2 :(得分:9)

您是否尝试过:项目属性>申请>输出类型:到“Windows应用程序”?

答案 3 :(得分:2)

它比控制台应用程序稍微复杂一点......但如果你想在某人登录时真正在后台运行某些东西,那么你可以创建一个Windows服务应用程序。

但它确实需要在设置和安装Windows服务方面做一些额外的工作,但网上有大量的示例代码:

http://msdn.microsoft.com/en-us/library/9k985bc9(v=VS.80).aspx

http://msdn.microsoft.com/en-us/library/sd8zc8ha(v=VS.80).aspx

http://www.c-sharpcorner.com/uploadfile/mahesh/window_service11262005045007am/window_service.aspx

http://www.developer.com/net/net/article.php/2173801/Creating-a-Windows-Service-in-NET.htm

http://www.codeproject.com/KB/dotnet/simplewindowsservice.aspx

答案 4 :(得分:2)

您好我正在创建一个由任务调度程序调用的控制台应用程序。我不希望控制台应用程序显示,所以我更改了项目属性以将输出输出到Windows应用程序。

将输出类型更改为Windows应用程序 转至:项目 - >项目属性 并将输出类型更改为Windows应用程序

答案 5 :(得分:0)

我尝试了两种方法2)Searock然后1)Josh ---在Searock的解决方案中,控制台应用程序窗口仍然出现,虽然在很短的时间内 - 但是对于Josh的解决方案,控制台没有出现也没有我的程序有任何问题 - 当然我必须用一个将信息记录到日志文件的调用替换所有console.writeline调用

注意:我会对Josh的解决方案做出评论,但我还不能这样做:)