getstdhandle用法

 2025-09-14  阅读 37  评论 0

摘要:`GetStdHandle` 是 Windows API 中的一个函数,用于获取标准输入、输出或错误输出的句柄。以下是其用法详解:
函数原型
cpp
HANDLE GetStdHandle(DW

`GetStdHandle` 是 Windows API 中的一个函数,用于获取标准输入、输出或错误输出的句柄。以下是其用法详解:

getstdhandle用法

函数原型

cpp

HANDLE GetStdHandle(DWORD nStdHandle);

参数

  • `nStdHandle`:指定要获取的标准设备句柄类型,取值为以下常量之一:
  • `STD_INPUT_HANDLE`:标准输入(如键盘输入)。
  • `STD_OUTPUT_HANDLE`:标准输出(如控制台窗口)。
  • `STD_ERROR_HANDLE`:标准错误输出(通常与输出相同,但可单独重定向)。
  • 返回值

  • 成功时返回对应设备的句柄(`HANDLE` 类型)。
  • 失败时返回 `INVALID_HANDLE_VALUE`。可通过 `GetLastError` 获取错误代码。
  • 典型用途

    1. 读写控制台输入/输出

    cpp

    include

    include

    int main {

    // 获取标准输出句柄

    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

    if (hConsole == INVALID_HANDLE_VALUE) {

    std::cerr << "获取句柄失败!错误代码: " << GetLastError;

    return 1;

    // 使用句柄写入控制台

    const char text = "Hello, 控制台!

    ;

    DWORD charsWritten;

    WriteConsole(hConsole, text, strlen(text), &charsWritten, NULL);

    return 0;

    2. 设置控制台文本属性(如颜色)

    cpp

    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

    SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_INTENSITY);

    std::cout << "红色高亮文本";

    3. 重定向标准输入/输出

    cpp

    // 将标准输出重定向到文件

    HANDLE hFile = CreateFile("output.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

    SetStdHandle(STD_OUTPUT_HANDLE, hFile);

    HANDLE hNewStdOut = GetStdHandle(STD_OUTPUT_HANDLE); // 获取重定向后的句柄

    注意事项

    1. 无需关闭句柄

    `GetStdHandle` 返回的句柄由系统管理,不要调用 `CloseHandle` 关闭它们。

    2. 错误处理

    始终检查返回值是否为 `INVALID_HANDLE_VALUE`,尤其是当程序可能在没有控制台的环境(如 GUI 应用)中运行时。

    3. 与 C/C++ 标准库的关系

    C++ 的 `std::cout`、`std::cin` 和 C 的 `printf`、`scanf` 默认使用标准句柄。直接操作句柄会影响这些标准函数的行为。

    4. Unicode 支持

    若需处理 Unicode 字符,使用 `WriteConsoleW` 替代 `WriteConsole`,并传递宽字符字符串。

    常见问题

    Q:程序没有控制台窗口时,`GetStdHandle` 会失败吗?

    A:是的。对于 GUI 程序,需通过 `AllocConsole` 先创建控制台,或使用 `AttachConsole` 附加到父进程的控制台。

    Q:如何恢复默认的标准输出?

    A:在重定向前保存原始句柄,之后通过 `SetStdHandle` 恢复:

    cpp

    HANDLE hOrigStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

    // ...重定向操作...

    SetStdHandle(STD_OUTPUT_HANDLE, hOrigStdOut);

    通过 `GetStdHandle`,你可以直接操作 Windows 控制台的底层句柄,实现更灵活的控制台交互。

    版权声明: 知妳网保留所有权利,部分内容为网络收集,如有侵权,请联系QQ793061840删除,添加请注明来意。

    原文链接:https://www.6g9.cn/qwsh/ddeadAD5SVFhR.html

    发表评论:

    关于我们
    知妳网是一个专注于知识成长与生活品质的温暖社区,致力于提供情感共鸣、实用资讯与贴心服务。在这里,妳可以找到相关的知识、专业的建议,以及提升自我的优质内容。无论是职场困惑、情感心事,还是时尚美妆、健康生活,知妳网都能精准匹配妳的需求,陪伴妳的每一步成长。因为懂妳,所以更贴心——知妳网,做妳最知心的伙伴!
    联系方式
    电话:
    地址:广东省中山市
    Email:admin@qq.com

    Copyright © 2022 知妳网 Inc. 保留所有权利。 Powered by

    页面耗时0.0455秒, 内存占用1.7 MB, 访问数据库19次