Windows 应用程序可以选择用 C++ 写入控制台吗?

2023-12-15

我想要一个具有以下行为的 Windows 应用程序:
1. 如果它是从现有的命令行窗口 (cmd.exe) 启动,那么它将其标准输出写入该控制台。
2. 如果通过双击其图标来启动它,则它不会打开新控制台,也不会在任何地方写入其标准输出。

为了达到 1,我可以设置/SUBSYSTEM链接器参数CONSOLE但如果我双击应用程序图标,则会打开一个新的控制台窗口。
为了实现 2,我将相同的参数设置为WINDOWS,但是如果我从控制台启动应用程序,其标准输出不会定向到控制台。
我希望同一个可执行文件具有两种行为。

到目前为止我发现我可以创建一个/SUBSYSTEM:WINDOWS可执行文件并执行以下操作:

DWORD ret = AttachConsole(ATTACH_PARENT_PROCESS)
if (ret != 0) {  // succeeds only if the parent is cmd.exe
     HANDLE outh = GetStdHandle(STD_OUTPUT_HANDLE);
     WriteFile(outh, "Hello", 5, NULL, NULL);
}

这写Hello如果进程是从一个进程启动的,则返回到控制台,否则不执行任何操作。
现在的问题是让 CRT 接受outh作为标准输出的句柄。我怎样才能做到这一点?

此选项的另一个问题是 cmd.exe 不会阻止已启动的进程。一旦新进程启动,cmd.exe 就会返回到提示符并显示Hello字符串出现在提示符处。如果用户在控制台上按 Enter,则会出现另一个提示。关于如何防止这种情况有什么想法吗?


在这里找到了答案:http://dslweb.nwnexus.com/~ast/dload/guicon.htm

DWORD ret = AttachConsole(-1);
if (ret != 0) {
   HANDLE lStdHandle = GetStdHandle(STD_OUTPUT_HANDLE);
   int hConHandle = _open_osfhandle((intptr_t)lStdHandle, 0);
   FILE* fp = _fdopen( hConHandle, "w" );
   *stdout = *fp;
}

至于让 cmd.exe 等待,这似乎不可能:http://blogs.msdn.com/b/oldnewthing/archive/2009/01/01/9259142.aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows 应用程序可以选择用 C++ 写入控制台吗? 的相关文章

  • 如何保证对象只有一个线程

    我有以下代码 class Service public void start creates thread which creates window and goes to message loop void stop sends WM C
  • 何时使用 =default 使析构函数默认?

    尽管对构造函数使用 default 对我来说很清楚 即强制编译器在其他构造函数存在时创建默认构造函数 但我仍然无法理解这两种类型的析构函数之间的区别 那些使用 default 的 那些没有显式定义并由编译器自动生成的 我唯一想到的是 gro
  • 为什么在创建矩阵类时使用向量不好?

    对于我的矩阵类 我做了 template
  • 平滑滚动.net 表单

    您好 我正在 net 中使用表单 并且在运行时动态添加大量链接标签 我将这些链接标签添加到面板并将该面板添加到 winform 当链接标签的数量增加时 表单会显示一个自动滚动条 垂直 现在 当我使用自动滚动向下滚动时 表单在滚动时不会更新其
  • 根据 N 个值中最小的一个返回不同的结果

    不确定如何使标题更具描述性 所以我只是从一个例子开始 我使用下面的代码位 它从枚举中选择一个方向 具体取决于四个轴中哪一个与给定方向相比形成最小角度 static Direction VectorToDirection Vector2 di
  • 如何在 SqlDataReader.Read() 期间从死锁异常中恢复

    我的 NET 应用程序的事件日志显示 它在从 Sql Server 读取数据时偶尔会出现死锁 这种情况通常非常罕见 因为我们已经优化了查询以避免死锁 但有时仍然会发生 过去 我们在调用ExecuteReader函数在我们的SqlComman
  • 动态生成的控件 ID 返回为 NULL

    我可以在 Page PreInit 函数中创建动态控件 如何检索控件及其 ID 我的 C 代码用于创建动态控件之一 var btn new WebForms Button btn Text btn ID Addmore btn Click
  • 类的成员复制

    在学习 复制成员 概念时 书中给出了如下说法 此外 如果非静态成员是引用 const 或没有复制赋值的用户定义类型 则无法生成默认赋值 我不太明白这个声明到底想传达什么 或者说这个说法指的是哪一种场景 谢谢 该语句与编译器自动为您编写的类
  • 在 JSQMessagesViewController 中显示 LocationMediaItem

    我刚刚尝试实施LocationMediaItem in my Xamarin iOS应用程序使用JSQMessagesViewController 一切都很顺利 唯一的问题是UICollectionView应该显示位置的单元格永远停留在加载
  • 从 WebBrowser 控件 C# 获取滚动值

    我试图在 WebBrowser 控件中获取网页的 Y 滚动索引 但无法访问内置滚动条的值 有任何想法吗 对于标准模式下的 IE 使用文档类型 正如你所说 scrollTop是的财产元素 而不是 HtmlDocument htmlDoc th
  • 检查 RoutedEvent 是否有任何处理程序

    我有一个自定义 Button 类 当单击它时 打开特定窗口 它总是执行相同的操作 我添加了一个可以在按钮的 XAML 中分配的 Click 事件 就像常规按钮一样 当它被单击时 我想执行 Click 事件处理程序 如果已分配 否则我想执行默
  • AES 输出是否小于输入?

    我想加密一个字符串并将其嵌入到 URL 中 因此我想确保加密的输出不大于输入 AES 是可行的方法吗 不可能创建任何始终会创建比输入更小的输出的算法 但可以将任何输出反转回输入 如果您允许 不大于输入 那么基本上您只是在谈论同构算法alwa
  • uri 警告中缺少端口:使用 Python OpenCV cv2.VideoCapture() 打开文件时出错

    当我尝试流式传输 ipcam 时 出现了如下所示的错误 tcp 000000000048c640 uri 中缺少端口 警告 打开文件时出错 build opencv modules videoio src cap ffmpeg impl h
  • 如何通过 JsonConvert.DeserializeObject 在动态 JSON 中使用 null 条件运算符

    我正在使用 Newtonsoft 反序列化已知的 JSON 对象并从中检索一些值 如果存在 关键在于对象结构可能会不断变化 因此我使用动态来遍历结构并检索值 由于对象结构不断变化 我使用 null 条件运算符来遍历 JSON 代码看起来像这
  • 如何在c的case语句中使用省略号?

    CASE expr no commas ELLIPSIS expr no commas 我在c的语法规则中看到了这样的规则 但是当我尝试重现它时 int test float i switch i case 1 3 printf hi 它失
  • ASP.NET MailMessage.BodyEncoding 和 MailMessage.SubjectEncoding 默认值

    很简单的问题 但我在 MSDN 上找不到答案 查找 ASP NET 将用于的默认值 MailMessage BodyEncoding and MailMessage SubjectEncoding 如果你不在代码中设置它们 Thanks F
  • .NET Core 中的跨平台文件名处理

    如何处理文件名System IO以跨平台方式运行类以使其在 Windows 和 Linux 上运行 例如 我编写的代码在 Windows 上完美运行 但它不会在 Ubuntu Linux 上创建文件 var tempFilename Dat
  • cout 和字符串连接

    我刚刚复习了我的 C 我尝试这样做 include
  • 每个数据库多个/单个 *.edmx 文件

    我有一个通过 ADO net 数据服务与数据库交互的项目 数据库很大 近 150 个具有依赖关系的表 该项目几年前开始 当时使用的是数据集 现在我们正在转向实体模型关系 由于我们添加了更多需要使用的表 该模型正在不断增长 这是管理这一切的正
  • 将 char[][] 转换为 char** 会导致段错误吗?

    好吧 我的 C 有点生疏了 但我想我应该用 C 来做我的下一个 小 项目 这样我就可以对其进行抛光 并且我已经有不到 20 行的段错误了 这是我的完整代码 define ROWS 4 define COLS 4 char main map

随机推荐

  • 删除加法逆元对

    这个问题是基于我之前在 SO 上提出的两个问题 每个问题都比前一个更复杂 在上一篇文章中 如何识别 R 中行的镜像重复项 我想识别数据框中行的 部分 匹配 具体来说 如果数据帧中的特定行基于列子集之间的匹配在数据帧中的其他位置具有重复行 我
  • 部署到 Istio(使用 Kubernetes)的 Jhipster 无法正确加载

    我正在将 Jhipster 应用程序部署到 Kubernetes 环境 并使用 Istio 进行网络连接 下面是我的虚拟服务 请注意 当prefix被设定为 一切正常 但是 我有几个应用程序在此集群上运行 因此我需要将其映射到 mywebs
  • 如何禁用 Django 查询缓存?

    在我的 Django 应用程序中 我在数据库上重复运行相同的查询 例如每 10 秒 然后 我根据收到的查询集创建 MD5 总和 并将其与我在上次运行中创建的 MD5 总和进行比较 如果两者相等 则数据没有改变 网页不需要更新 当我这样做时
  • Linux脚本启动、停止、重新启动[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 谁能告诉我这个脚本到底做了什么 bin sh test f usr bin sshd exit 0 case 1 in start echo n Starting sshd ss
  • Java 6 的性能改进是针对 JDK、JVM 还是两者?

    我一直想知道 Java SE 6 中所吹捧的性能改进 是在编译器中还是在运行时中 换句话说 由 JDK 6 编译的 Java 5 应用程序在 JSE 5 下运行时是否会看到改进 表明编译器优化得到改进 由 JDK 5 编译的 Java 5
  • 通过 acrokey 查找字段绝对位置和尺寸

    给定一个 acrokey 是否可以找到该特定字段的绝对位置和尺寸 getLeft getTop getWidth getHeight 反之亦然是否可能 如果我知道位置 我可以获得该字段的缩写吗 你的问题的第一部分 假设您有一个AcroFie
  • WinForms:如何在即将显示时自定义工具提示?

    我想为树视图中的每个项目和列表视图中的每个项目提供一个工具提示 并且为列表视图中的每个子项目 即列 提供不同的工具提示 我可以确定我想要显示的文本 使用当前鼠标位置的命中测试等 private void toolTip1 Popup obj
  • .htaccess 修复了 PHP 中的漂亮永久链接?

    也许我的处理方式是错误的 但我在我们自己开发的 CMS 中有一些页面 我想使用漂亮的永久链接进行转换 目前 他们的页面 URL 如下所示 http ourdomain com articles permalink blah blah bla
  • 作业不通过使用 RabbitMQ 运行 celery 的 Airflow 执行

    下面是我使用的配置 core The home folder for airflow default is airflow airflow home root airflow The folder where your airflow pi
  • 'NSInvalidArgumentException',原因:'-[UIImageView _isResizable] 自定义表格视图单元格异常

    I get a NSInvalidArgumentException在我的自定义单元的执行时间上 调试器错误日志 2014 12 25 21 39 11 397 Codebuddies 24159 11353215 Terminating
  • PHP 用 dom 返回 html 表的第 n 行

    我正在尝试使用 simplehtmldom http simplehtmldom sourceforge net 打印出表格的第 n 行 目前没有任何反应 我还需要做什么吗 假设第 9 行是 TUE 行 您也可以使用 PHP 内置的 DOM
  • 在Android中读取python pickle数据流

    我有这个文件 其中包含 python pickle 数据流 我必须在 Android 中读取该文件的内容 例如 如果我想在 python 中读取这个数据流 我只需使用以下代码 queue pickle load open filename
  • RuntimeError:加载 state_dict 时出错

    我有以下 PyTorch 模型 import math from abc import abstractmethod import torch nn as nn class AlexNet3D nn Module abstractmetho
  • 合并第一列的结果然后对第二列求和以列出第一列中每个条目的总计

    我是 Bash 新手 所以请耐心等待 我有一个由另一个软件 我无法控制 转储的文本文件 列出了每个用户访问某些资源的次数 如下所示 Jim 109 Bob 94 John 92 Sean 91 Mark 85 Richard 84 Jim
  • c# 类型别名/自定义类型

    我试图将一些 Delphi 代码转换为 C 但我遇到了一个问题 在 Delphi 中我声明了一个新类型 Type TData Array of Extended 我可以在其中使用以下语句访问返回此类型的函数的结果 Function TMyO
  • 如何在php中安装oauth

    如何在 php ini 中安装 oauth任何人都可以向我提供完整的描述 链接和所有库 我尝试从here但我不明白 我想通过以下代码访问oauth令牌 oauth new OAuth API CONSUMER KEY API CONSUME
  • 在 Swift 中添加和删除视图叠加

    从这个问题得出 从 Swift 中的任何类加载屏幕 Issue 调用 hideOverlayView 时 加载叠加视图将显示但不会隐藏 但奇怪的是 叠加层在一段时间后消失 出现后 15 到 30 秒 Code 包含在FirstControl
  • android.content.res.Resources$NotFoundException:资源 ID #0x0 java 异常

    当运行尝试显示对象的 ListView 的片段时会发生此异常 我已经研究了该异常 但其他情况的解决方案似乎与 setText 函数有关 或者尝试将字符串以外的任何内容显示为字符串 我真的不知道还能说什么 提前致谢 Java类 import
  • 从 ASP.NET MVC2 应用程序执行 Ajax 调用时出现问题

    我正在将现有的 ASP NET 应用程序转换为 MVC2 并且我有一个使用 Ajax 通过 jQuery 调用的现有方法 该方法以前可以工作 但现在不起作用 因此 由于使用 MVC2 我似乎需要做一些我无法弄清楚的更改 我已经降低了代码的复
  • Windows 应用程序可以选择用 C++ 写入控制台吗?

    我想要一个具有以下行为的 Windows 应用程序 1 如果它是从现有的命令行窗口 cmd exe 启动 那么它将其标准输出写入该控制台 2 如果通过双击其图标来启动它 则它不会打开新控制台 也不会在任何地方写入其标准输出 为了达到 1 我