当前位置: 首页 > news >正文

Windows控制台函数:标准输入输出流交互函数GetStdHandle()

目录

什么是 GetStdHandle?

它长什么样?

怎么用它?

它跟 std::cout 有什么不一样?

GetStdHandle 是一个 Windows API 函数,用于获取标准输入、标准输出或标准错误设备的句柄。它定义在 Windows 的核心头文件 <windows.h> 中,通常用于控制台应用程序中,以便与标准输入输出流(如键盘输入或控制台输出)进行交互。

什么是 GetStdHandle?

GetStdHandle 函数的全称是 "Get Standard Handle"。 

  • Get":表示这是一个获取操作。

  • "Std":是 Standard(标准)的缩写,指的是标准输入、输出或错误流。

  • "Handle":指的是一个句柄(handle),在 Windows 中,句柄通常是对系统资源(如文件、窗口、输入输出流等)的一种引用或标识。

想象你在用 C++ 写程序时,经常用 std::cout 来输出文字到屏幕上,对吧?比如:

#include <iostream>
int main() {std::cout << "Hello, world!" << std::endl;return 0;
}

这里 std::cout 是一个“工具”,它负责把文字送到屏幕上。但在 Windows 系统中,如果你不用 C++ 的标准库,而是直接跟操作系统“对话”,就需要用到 Windows 提供的一些函数,其中 GetStdHandle 就是帮你拿到类似 std::cout 这样的“工具”的。

简单来说,GetStdHandle 是 Windows 给你的一个函数,它能让你拿到控制台的“钥匙”(专业术语叫“句柄”),有了这个钥匙,你就可以直接跟屏幕(或键盘)互动了。

它长什么样?

在 C++ 代码里,GetStdHandle 的样子是这样的:

HANDLE GetStdHandle(DWORD nStdHandle);
  • HANDLE: 这是“钥匙”的类型,类似于一个指针,但具体是什么暂时不用管,只要知道它代表某个东西就行。

  • DWORD: 这是 Windows 定义的一个数字类型,相当于 unsigned int,用来告诉函数你想要哪把“钥匙”。

  • nStdHandle: 你传给函数的参数,告诉它“我想要屏幕的钥匙”还是“键盘的钥匙”。

常见的选项有:

  • STD_OUTPUT_HANDLE(写成 -11):给我屏幕的钥匙,我想输出东西。(就是用来让程序往屏幕上打印内容)

  • STD_INPUT_HANDLE(写成 -10):给我键盘的钥匙,我想读输入。(就是用来让程序从键盘读取用户的输入)

  • STD_ERROR_HANDLE(写成 -12):给我错误输出的钥匙(也是屏幕,但可以单独用)。

怎么用它?

假设你想用 GetStdHandle 在屏幕上写“Hello, Windows!”,我们可以这样写:

#include <windows.h> // 必须包含这个头文件,里面有 Windows 的工具
#include <cstring>int main() {// 1. 拿到屏幕的“钥匙”HANDLE screen = GetStdHandle(STD_OUTPUT_HANDLE);// 2. 检查钥匙是不是拿到了if (screen == INVALID_HANDLE_VALUE) { // 如果钥匙是“坏的”return 1; // 出错了,退出程序}// 3. 用这个钥匙写东西到屏幕上const char* message = "Hello, Windows!\n";DWORD written; // 用来记录写了多少个字符WriteConsoleA(screen, message, strlen(message), &written, NULL);return 0;
}

一步步解释:

  1. 拿到钥匙:

    • GetStdHandle(STD_OUTPUT_HANDLE) 就像去问 Windows:“给我屏幕的钥匙吧!” 返回的 screen 是一个 HANDLE,你可以把它想象成一个工具的“ID”。

  2. 检查钥匙:

    • 如果程序没有屏幕(比如你关了控制台窗口),Windows 会给你一个“坏钥匙”(INVALID_HANDLE_VALUE),所以要检查一下。

  3. 用钥匙做事:

    • WriteConsoleA 是另一个 Windows 函数,专门用这个“钥匙”在屏幕上写东西。

    • 它需要:

      • screen: 你刚拿到的钥匙。

      • message: 你想写什么。

      • strlen(message): 写多少个字符。

      • &written: 记录实际写了多少(类似 C++ 的传引用)。

      • NULL: 最后一个参数先不用管,写 NULL 就好。

运行这个程序,你会在黑色的控制台窗口看到“Hello, Windows!”。

它跟 std::cout 有什么不一样?

  • std::cout 是 C++ 标准库提供的,简单好用,但它藏了很多细节,你不知道它是怎么跟屏幕沟通的。

  • GetStdHandle + WriteConsoleA 是直接跟 Windows 操作系统打交道,给你更多控制权。比如,你可以用它改变文字颜色,或者直接读键盘按键,而 std::cout 做不到这些。

相关文章:

Windows控制台函数:标准输入输出流交互函数GetStdHandle()

目录 什么是 GetStdHandle&#xff1f; 它长什么样&#xff1f; 怎么用它&#xff1f; 它跟 std::cout 有什么不一样&#xff1f; GetStdHandle 是一个 Windows API 函数&#xff0c;用于获取标准输入、标准输出或标准错误设备的句柄。它定义在 Windows 的核心头文件 <…...

Vue3 中 Computed 用法

Computed 又被称作计算属性&#xff0c;用于动态的根据某个值或某些值的变化&#xff0c;来产生对应的变化&#xff0c;computed 具有缓存性&#xff0c;当无关值变化时&#xff0c;不会引起 computed 声明值的变化。 产生一个新的变量并挂载到 vue 实例上去。 vue3 中 的 com…...

常见的三种锁

一、互斥锁 互斥锁 Mutex 保证在任意时刻只有一个线程能够进入被保护的临界区。当一个线程获取到互斥锁后&#xff0c;其他线程若要进入临界区就会被阻塞&#xff0c;直到该线程释放锁。 互斥锁是一种阻塞锁&#xff0c;当线程无法获取到锁时&#xff0c;会进入阻塞状态。 应…...

离线文本转语音库pyttsx3(目前接触到的声音效果最好的,基本上拿来就能用)

在现代应用程序中&#xff0c;文本转语音&#xff08;Text-to-Speech, TTS&#xff09;技术越来越受到重视。无论是为视力障碍人士提供帮助&#xff0c;还是为教育和娱乐应用增添趣味&#xff0c;TTS 都能发挥重要作用。今天&#xff0c;我们将介绍一个简单易用的 Python 库——…...

LeetCode Hot100刷题——反转链表(迭代+递归)

206.反转链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]示例 3&#…...

JJJ:linux sysfs相关

文章目录 1.sysfs&#xff08;属性&#xff09;文件的创建、读、写1.1 创建流程1.2 open流程1.3 read流程 2.补充2.1 sysfs下常见目录介绍2.2 属性相关2.2.1 简介2.2.2 attribute文件的创建 2.3 sysfs目录如何创建的 1.sysfs&#xff08;属性&#xff09;文件的创建、读、写 1…...

Leetcode 刷题记录 06 —— 矩阵

本系列为笔者的 Leetcode 刷题记录&#xff0c;顺序为 Hot 100 题官方顺序&#xff0c;根据标签命名&#xff0c;记录笔者总结的做题思路&#xff0c;附部分代码解释和疑问解答。 目录 01 矩阵置零 方法一&#xff1a;标记数组 方法二&#xff1a;两个标记变量 02 螺旋矩阵…...

什么样的物联网框架适合开展共享自助KTV唱歌项目?

现在物联网的广泛应用&#xff0c;也让更多用户们看到了它的实力&#xff0c;也使得共享经济遍地开花。其中共享自助唱歌设备也备受欢迎&#xff0c;那么适合开展共享自助KTV唱歌项目的物联网框架都应具备哪些特点呢&#xff1f; 智能化与自动化管理 物联网技术在共享KTV中的应…...

【Academy】HTTP Host 标头攻击 ------ HTTP Host header attacks

HTTP Host 标头攻击 ------ HTTP Host header attacks 1. 什么是 HTTP Host 标头&#xff1f;2. 什么是 HTTP Host 标头攻击&#xff1f;3. HTTP Host 标头漏洞是如何产生的&#xff1f;4. 如何测试 HTTP Host 标头漏洞4.1 提供任意 Host 标头4.2 检查有缺陷的验证4.3 发送不明…...

Web基础:HTML快速入门

HTML基础语法 HTML&#xff08;超文本标记语言&#xff09; 是用于创建网页内容的 标记语言&#xff0c;通过定义页面的 结构和内容 来告诉浏览器如何呈现网页。 超文本&#xff08;Hypertext&#xff09; 是一种通过 链接&#xff08;Hyperlinks&#xff09; 将不同文本、图像…...

技术领域,有许多优秀的博客和网站

在技术领域&#xff0c;有许多优秀的博客和网站为开发者、工程师和技术爱好者提供了丰富的学习资源和行业动态。以下是一些常用的技术博客和网站&#xff0c;涵盖了编程、软件开发、数据科学、人工智能、网络安全等多个领域&#xff1a; 1. 综合技术博客 1.1 Medium 网址: ht…...

k8s概念及k8s集群部署(Centos7)

Centos7部署k8s集群 部署之前&#xff0c;先简单说下k8s是个啥&#xff1a; 一、k8s简介&#xff1a; k8s&#xff0c;全称&#xff1a;kubernetes&#xff0c;它可以看作是一个分布式系统支撑平台。k8s的作用&#xff1a; 1、故障自愈&#xff1a; k8s这个玩意可以监控容器…...

《DeepSeek-V3:动态温度调节算法,开启推理新境界!》

在人工智能领域不断探索的征程中&#xff0c;DeepSeek-V3以其卓越的创新技术&#xff0c;尤其是动态温度调节算法&#xff0c;成为了备受瞩目的焦点。这项算法犹如一把神奇的钥匙&#xff0c;巧妙地开启了推理速度与精度动态平衡的大门&#xff0c;为大语言模型的发展开辟了新的…...

Python从入门到精通1:FastAPI

引言 在现代 Web 开发中&#xff0c;API 是前后端分离架构的核心。FastAPI 凭借其高性能、简洁的语法和自动文档生成功能&#xff0c;成为 Python 开发者的首选框架。本文将从零开始&#xff0c;详细讲解 FastAPI 的核心概念、安装配置、路由设计、请求处理以及实际应用案例&a…...

fastapi+angular停车管理系统可跨域

说明&#xff1a; 我计划用fastapiangular做一款停车管理系统&#xff0c;支持跨域 1.设计mysql数据库表&#xff0c; 2.建表&#xff0c;添加测试数据&#xff0c;多表查询&#xff0c; 3.在fastapi写接口查询数据&#xff0c; 4.用postman测试&#xff0c; 5.在angular前端展…...

前端题目类型

HTMLCSS常见面试题 HTML标签有哪些行内元素 img、picture、span、input、textarea、select、label 说说你对元素语义化的理解 元素语义化就是用正确的元素做正确的事情。虽然理论上所有html元素都可通过css样式实现相同效果&#xff0c;但这样会使事情复杂化&#xff0c;所以需…...

openwrt路由系统------lua、uci的关系

1. Luci 的核心组成 (1) Lua 简介:Luci 的界面和逻辑几乎完全使用 Lua 脚本语言编写。Lua 是一种轻量级、高效的嵌入式脚本语言,适合在资源受限的路由器环境中运行。作用: 生成动态 Web 页面(与后端交互渲染 HTML)。处理用户提交的表单数据(如修改 Wi-Fi 密码)。调用系…...

Elastic:AI 会开始取代网络安全工作吗?

作者&#xff1a;来自 Elastic Joe DeFever 不会&#xff0c;但它正在从根本上改变这些工作。 生成式 AI (GenAI) 正迅速成为日常安全工作流程中的一个重要组成部分。那么&#xff0c;它是合作伙伴还是竞争对手&#xff1f; GenAI 技术在安全堆栈几乎每个方面的广泛应用&#…...

Linux安装升级docker

Linux 安装升级docker Linux 安装升级docker背景升级停止docker服务备份原docker数据目录移除旧版本docker安装docker ce恢复数据目录启动docker参考 安装找到docker官网找到docker文档删除旧版本docker配置docker yum源参考官网继续安装docker设置开机自启配置加速测试 Linux …...

【经验分享】Ubuntu20.04编译RK3568 AI模型报错问题(已解决)

【经验分享】Ubuntu20.04编译RK3568 AI模型报错问题&#xff08;已解决&#xff09; 前言问题现象问题分析解决方案总结 前言 这里使用的是Rockchip提供的rknn_model_zoo&#xff0c;https://github.com/airockchip/rknn_model_zoo/tree/main 此解决方案适用于Rockchip芯片在U…...

大语言模型推理能力突破

大语言模型原生推理能力增强课题 目录 大语言模型原生推理能力增强课题 当前LLM深层符号推理的核心瓶颈(结合场景实例) 1. 幻觉频发:符号推理的事实一致性崩塌 2. 自我纠错能力弱:缺乏闭环的校验与修正机制 3. 推理链条易断裂:长程逻辑依赖的一致性丢失 全链路原生推理能…...

Qwen3-0.6B-FP8效果展示:中英混合输入、长上下文保持、多轮记忆实测

Qwen3-0.6B-FP8效果展示&#xff1a;中英混合输入、长上下文保持、多轮记忆实测 1. 开篇&#xff1a;小模型&#xff0c;大能耐 你可能听过很多关于大语言模型的讨论&#xff0c;动辄几十亿、上百亿参数&#xff0c;部署起来对硬件要求极高。但今天我想跟你聊点不一样的——一…...

Connect to Oracle Database with JDBC Driver

1. Overview The Oracle Database is one of the most popular relational databases. In this tutorial, we’ll learn how to connect to an Oracle Database using a JDBC Driver. 2. The Database To get us started, we need a database. If we don’t have access to …...

Qwen3-TTS部署案例:车载中控系统离线多语种导航语音引擎集成

Qwen3-TTS部署案例&#xff1a;车载中控系统离线多语种导航语音引擎集成 在智能座舱快速演进的今天&#xff0c;车载语音交互已从“能听清”迈向“听得懂、说得好、有温度”的新阶段。传统TTS方案常受限于网络依赖、语种覆盖窄、响应延迟高、方言适配弱等问题&#xff0c;难以…...

Windows下OpenClaw实战:30分钟接入Qwen3.5-4B-Claude模型

Windows下OpenClaw实战&#xff1a;30分钟接入Qwen3.5-4B-Claude模型 1. 为什么选择WindowsOpenClaw组合 去年我在尝试自动化办公流程时&#xff0c;发现很多AI工具对Windows支持并不友好。直到遇到OpenClaw&#xff0c;这个开源的智能体框架让我眼前一亮——它不仅能像人类一…...

Linux内核构建系统:Makefile、Kconfig与.config解析

1. Linux内核构建系统核心组件解析1.1 内核构建系统概述Linux内核作为复杂的开源项目&#xff0c;其构建系统由三个关键组件构成&#xff1a;Makefile、Kconfig和.config文件。这三个组件协同工作&#xff0c;构成了内核模块化构建的基础架构。1.1.1 组件类比关系Kconfig&#…...

杭州做生成式引擎优化的服务公司有哪些?

杭州做生成式引擎优化的服务公司有哪些&#xff1f; 一、行业背景&#xff1a;GEO已成为AI时代企业增长的核心基建 生成式引擎优化&#xff08;GEO&#xff0c;Generative Engine Optimization&#xff09;&#xff0c;是针对大语言模型的检索逻辑与回答规则&#xff0c;优化企…...

机器人路径规划算法之VFH算法详解+MATLAB代码实现

目录 一、 运作原理&#xff1a;三步把地图变成方向 1. 建图&#xff1a;构建直方图网格&#xff08;Histogram Grid&#xff09; 2. 降维&#xff1a;生成极坐标直方图&#xff08;Polar Histogram&#xff09; 3. 决策&#xff1a;代价函数与山谷选择 二、 算法演进&…...

路径规划算法技术选型与实战指南:从理论到工程落地

路径规划算法技术选型与实战指南&#xff1a;从理论到工程落地 【免费下载链接】PathPlanning Common used path planning algorithms with animations. 项目地址: https://gitcode.com/gh_mirrors/pa/PathPlanning 当仓库机器人在密集货架间灵活避障&#xff0c;当无人…...

Matlab 实现 DES 与 RSA 双重加密及可视化界面搭建

基于matlab上的DES和RSA两种算法的双重加密&#xff0c;附带显示界面&#xff0c;可更改DES密钥&#xff0c;明文消息&#xff08;在显示界面中&#xff09;&#xff0c;可在代码中更改RSA对应的p&#xff0c;q&#xff0c;e等数据&#xff0c;代码可附加注释和对应要求修改。在…...