23

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

问题是,我不希望控制台应用程序实际出现。我需要它隐形。我需要的最后一件事是抱怨,因为有些人被 CMD 窗口打开和关闭吓坏了,此外图书馆希望它尽可能不可见。

我尝试遵循此线程中的代码:http: //social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/ea8b0fd5-a660-46f9-9dcb-d525cc22dcbd

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

有没有更好的方法来阻止控制台出现?谢谢。

4

6 回答 6

41

The best thing to do is just don't compile it as a console application! Compile it as a Windows EXE and no console will show. Then you can just do whatever you need to do in the Main method without showing a UI.

But in any case, if you must hide/show the console window I would steer clear of using FindWindow for this task since there is a much more reliable API for this: GetConsoleWindow. This will give you the HWND of the console window and you can try passing that to ShowWindow.

于 2010-08-16T21:49:08.997 回答
18

正如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
    }
}

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

于 2010-08-17T09:20:40.870 回答
8

Have you tried: Project Properties> Application > output Type: to "Windows Application"?

于 2010-08-16T21:49:49.930 回答
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

于 2010-08-16T21:57:44.643 回答
2

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

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

于 2013-11-04T14:40:28.880 回答
0

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

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

于 2016-05-17T03:07:52.303 回答