繁体   English   中英

如何检测正在执行应用程序的上下文? 无论是从命令提示符还是从Windows窗体内部

[英]How to detect the context from which an application is being executed? Whether from Command Prompt or from within a Windows Form

我正在尝试通过我们的一个内部应用程序运行一组测试用例。 我需要能够自动执行这些测试,并通过命令行运行它们并记录各种内容。 问题在于,现有代码无法将视图与控制器分开,并且会在所有要求用户单击按钮的地方抛出MessageBoxes和Alerts(在我的情况下,仅是OK / CONTINUE)。 当前,已经决定引入状态标志,这将有助于确定从中运行应用程序的上下文,因此可以决定是执行Console.WriteLine()还是MessageBox.Show() 但是正如您可以想象的那样,它已级联成许多更改和肮脏的if-else块。

可悲的是,在这个阶段坐下来将逻辑与视图分离似乎并不可行。 所以我想知道是否有一种方法可以检测应用程序正在执行的上下文。 我想用本身可以检测上下文的Notify()调用替换每个MessageBox()调用-是在命令提示符下显示输出还是弹出表单。

EDIT_1:也欢迎您提出其他建议。

在我的应用程序中,我解析命令行参数并设置一些内部标志。 如果将这种类型的解析添加到应用程序的入口点,则命令行参数的存在例如设置为“ Y”-可以在应用程序中设置适当的标志,用于确定将输出发送到哪里。

就个人而言,我将所有“ STDOUT”(控制台)输出捕获到日志文件,然后,如果未在“计划”模式下运行-我会弹出msgbox()

在使用Win32 API的C语言中(未经测试):

// requires Windows 2000 or later (for GetConsoleWindow)
int parent_owns_the_console()
{
    DWORD pid=0;
    GetWindowThreadProcessId(GetConsoleWindow(), &pid);
    return pid && pid != GetCurrentProcessId();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM