如何确定我是否作为控制台应用程序运行? (Win32上的Delphi)
发布时间:2020-12-14 04:16:07 所属栏目:Windows 来源:网络整理
导读:我有一个通用单元,可以记录到GExperts Debugger和/或OutputDebugString.我将在控制台应用程序中使用它,所以我希望它能够通过writeln()输出到stdout. 主可执行文件已经有{$APPTYPE CONSOLE},但我不认为这对我有帮助.将从几个地方调用日志记录例程: 主控制台
我有一个通用单元,可以记录到GExperts Debugger和/或OutputDebugString.我将在控制台应用程序中使用它,所以我希望它能够通过writeln()输出到stdout.
主可执行文件已经有{$APPTYPE CONSOLE},但我不认为这对我有帮助.将从几个地方调用日志记录例程: >主控制台应用程序,将链接到BPL, 将构建BPL和DLL而不能查看{$APPTYPE CONSOLE}指令,因此我不能使用IFDEF条件编译. BPL和DLL需要能够以任何方式进行,具体取决于主应用程序是否是常规的winapp或控制台应用程序. 我遇到的一个丑陋的解决方案是使用可执行文件的名称.例如: if (UpperCase(ExtractFileName(ParamStr(0))) = 'MYCONSOLEAPP.EXE') then ... 但我讨厌这样做,因为我可能有其他控制台应用程序…… 我宁愿只有一个神奇的功能AmIAConsoleApp:boolean; 更新:我看到我有点像this question的副本,但我想调查德尔福人,看看是否有更好的方法.
调用GetStdHandle(Std_Output_Handle).如果成功并返回零,则无法写入控制台.其他返回值表示控制台已连接到进程,因此您可以向其写入(尽管控制台可能不是在控制台程序中记录消息的最理想位置,因为它们会干扰正常输出).像这样的东西:
function IAmAConsoleApp: Boolean; var Stdout: THandle; begin Stdout := GetStdHandle(Std_Output_Handle); Win32Check(Stdout <> Invalid_Handle_Value); Result := Stdout <> 0; end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- windows – R devtools不适用于R 3.0.1?
- windows-phone-7 – System.OutOfMemoryException同时从隔离
- 如何遍历Windows批处理文件中的文件夹树/子树?
- vCenter6.7安装报错,错误1722,Windows installer程序包有
- windows – 我可以强制gVim在新标签中打开拖入的文件吗?
- windows – 好/免费工具或备份驱动程序的方法
- Windows界面编程第二篇 半透明窗体
- 从Windows内存转储创建Java堆转储
- 使用autoexp.dat和DLL扩展Visual Studio 2003 C调试器
- 当驱动器作为“通用”设备呈现时,如何监控Windows中的SSD磨