我有一些控制台和wpf应用程序使用的库代码.在库代码中,有一些Console.Read()
调用.如果应用程序是一个控制台应用程序,我只想做那些输入读取,如果它是一个GUI应用程序 - 如何在dll中告诉应用程序是否有控制台?
Ser*_*ral 19
为我工作(使用本机方法)
首先,声明:
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();
Run Code Online (Sandbox Code Playgroud)
之后,检查优雅......哈哈哈......:
if (GetConsoleWindow() != IntPtr.Zero)
{
Console.Write("has console");
}
Run Code Online (Sandbox Code Playgroud)
Ric*_*bob 16
最后我做了如下:
// Property:
private bool? _console_present;
public bool console_present {
get {
if (_console_present == null) {
_console_present = true;
try { int window_height = Console.WindowHeight; }
catch { _console_present = false; }
}
return _console_present.Value;
}
}
//Usage
if (console_present)
Console.Read();
Run Code Online (Sandbox Code Playgroud)
在thekips建议之后,我向库类中添加了一个委托成员来获取用户验证 - 并将其设置为默认的implimentation,使用上面来检查控制台是否存在,如果存在则使用它来获取用户验证,否则不执行任何操作(操作继续)没有用户验证).这意味着:
感谢所有回复的人.
Ped*_*dro 15
if (Environment.UserInteractive)
{
// A console is opened
}
Run Code Online (Sandbox Code Playgroud)
请参阅:http://msdn.microsoft.com/en-us/library/system.environment.userinteractive(v=vs.110).aspx
获取一个值,该值指示当前进程是否以用户交互模式运行.
您可以使用此代码:
public static bool HasMainWindow()
{
return (Process.GetCurrentProcess().MainWindowHandle != IntPtr.Zero);
}
Run Code Online (Sandbox Code Playgroud)
在Console vs. WinForms应用程序上快速测试工作得很好.
你应该在你的设计中解决这个问题.这是一个控制反转非常方便的地方的一个很好的例子.由于调用代码知道哪个UI可用,因此该代码应该指定IInputReader
接口的实例.这样,您可以在多个场景中使用相同的代码来获取用户的输入.
归档时间: |
|
查看次数: |
16977 次 |
最近记录: |