Jef*_*ard 25 c# user-interaction console-application
用C#编写的Windows控制台应用程序如何确定它是在非交互式环境中调用(例如从服务或作为计划任务)还是从能够进行用户交互的环境(例如命令提示符或PowerShell)调用?
Gle*_*den 38
要确定.NET应用程序是否在GUI模式下运行:
bool is_console_app = Console.OpenStandardInput(1) != Stream.Null;
Run Code Online (Sandbox Code Playgroud)
如果您要做的只是确定程序退出后控制台是否会继续存在(例如,以便您可以Enter在程序退出之前提示用户点击),那么您所要做的就是检查您的进程是否是唯一附加到控制台的进程。如果是,那么当您的进程退出时控制台将被销毁。如果有其他进程附加到控制台,那么控制台将继续存在(因为您的程序不会是最后一个)。
例如*:
using System;
using System.Runtime.InteropServices;
namespace CheckIfConsoleWillBeDestroyedAtTheEnd
{
internal class Program
{
private static void Main(string[] args)
{
// ...
if (ConsoleWillBeDestroyedAtTheEnd())
{
Console.WriteLine("Press any key to continue . . .");
Console.ReadKey();
}
}
private static bool ConsoleWillBeDestroyedAtTheEnd()
{
var processList = new uint[1];
var processCount = GetConsoleProcessList(processList, 1);
return processCount == 1;
}
[DllImport("kernel32.dll", SetLastError = true)]
static extern uint GetConsoleProcessList(uint[] processList, uint processCount);
}
}
Run Code Online (Sandbox Code Playgroud)
(*) 改编自此处找到的代码。
| 归档时间: |
|
| 查看次数: |
12841 次 |
| 最近记录: |