有没有办法在执行控制台应用程序时隐藏控制台窗口?
我目前正在使用Windows窗体应用程序来启动控制台进程,但我不希望在任务运行时显示控制台窗口.
问题是,我真的不希望控制台窗口出现......但解决方案应该正在运行.我的观点是,我想让应用程序在后台运行,没有任何窗口出现.
有没有办法在Windows应用程序中显示控制台?
我想做这样的事情:
static class Program
{
[STAThread]
static void Main(string[] args) {
bool consoleMode = Boolean.Parse(args[0]);
if (consoleMode) {
Console.WriteLine("consolemode started");
// ...
} else {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
Run Code Online (Sandbox Code Playgroud) 我在C#中有一个控制台应用程序,我想用户将无法看到它.
我怎样才能做到这一点?
我正在为我的公共图书馆开发一个控制台应用程序作为学校项目.控制台应用程序将在用户登录后立即运行并执行一些后台工作.
问题是,我不希望控制台应用程序真正出现.我需要它隐形.我需要的最后一件事就是投诉,因为有些人因为CMD窗口打开和关闭而感到害怕,除了图书馆希望它尽可能不可见.
我试着按照这个帖子中的代码:http: //social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/ea8b0fd5-a660-46f9-9dcb-d525cc22dcbd
但无济于事,我仍然可以看到控制台应用程序在完成所有工作后弹出和关闭.
有没有更好的方法来阻止控制台出现?谢谢.
我编写的应用程序可以在命令行上运行,也可以使用WPF UI运行.
[STAThread]
static void Main(string[] args)
{
// Does magic parse args and sets IsCommandLine to true if flag is present
ParseArgs(args);
if(IsCommandLine)
{
// Write a bunch of things to the console
}
else
{
var app = new App();
app.Run(new Window());
}
}
Run Code Online (Sandbox Code Playgroud)
我将项目的输出类型设置为控制台应用程序,如果我尝试通过双击exe来执行它,我会弹出一个控制台窗口.如果未设置标志(通过命令args传入),我不想向用户显示控制台窗口.
但是,如果我将项目的输出类型设置为Windows应用程序,则双击行为很好,但是当我在控制台中运行它时,我没有控制台输出(Console.Writeline)
通常,在命令提示符下调用 Windows 应用程序不会等待其退出。一旦我输入myFormApp.exe并按回车键,就会显示一个表单,并且命令提示符立即移动到下一行。
C:\> myFormApp.exe
C:\> # this line will display immediately
Run Code Online (Sandbox Code Playgroud)
我知道使用cmd /c将等待应用程序退出。
C:\> cmd /c myFormApp.exe
C:\> # this line will display after myFormApp.exe closed
Run Code Online (Sandbox Code Playgroud)
但即使没有,我也想等待cmd /c。
有没有办法通过编辑 myFormApp.exe 源代码来防止命令提示符移动到新行?
添加AllocConsole到Windows应用程序将显示控制台,但它不会使命令提示符等待退出。
if (args.Length > 0)
{
// Command line given, display console
AllocConsole();
}
else
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
Run Code Online (Sandbox Code Playgroud)
任何建议将不胜感激。谢谢!
我有一个小应用程序,应该以两种模式执行:非UI或WPF窗口.它应该依赖于命令行参数.
在每种模式中,我都需要显示一些反馈日志:
我已经找到:
而且我知道我可以在项目属性中静态选择"Windows应用程序"或"控制台应用程序".
选择"Windows应用程序",GetConsoleWindow()始终为0,我看不到如何重用以前的控制台.
选择"控制台应用程序",我可以重用以前的控制台,但是当在WPF窗口模式下从资源管理器启动时,会在我的WPF主窗口下创建一个控制台.
问题是:应用程序如何真正动态?在WPF窗口模式下,只有一个WPF窗口(根本没有控制台)或非UI,只有一个控制台(启动一个或新创建的控制台).
我们有一个扩展第三方应用程序的DLL.我希望这个DLL在启动纯粹用于调试目的时打开一个控制台窗口.我知道使用Windows应用程序执行此操作的技巧(将输出类型更改为控制台应用程序).有没有办法用类库做到这一点?
在我的 WPF 应用程序中,我使用控制台窗口作为调试/消息窗口 - 我有选项设置来根据用户的需要显示和隐藏窗口,一切都很好。唯一的问题是,当用户关闭控制台窗口时,它会退出整个程序。如何覆盖它,以便当用户单击 X 时它只是隐藏控制台而不是退出应用程序?
这是我到目前为止:
const int SW_HIDE = 0;
const int SW_SHOW = 5;
public static bool ConsoleVisible { get; private set; }
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
public static void HideConsole()
{
var handle = GetConsoleWindow();
ShowWindow(handle, SW_HIDE);
ConsoleVisible = false;
}
public static void ShowConsole()
{
var handle = GetConsoleWindow();
ShowWindow(handle, SW_SHOW);
ConsoleVisible = true;
}
Run Code Online (Sandbox Code Playgroud)
** 对于想要使用它的人,您需要: using System.Runtime.InteropServices;
此代码源自此答案:https : //stackoverflow.com/a/3571628/649382
** 编辑 …