SmileGuy17 2019-12-10 22:12 采纳率: 0%
浏览 474

为什么使用GetStdHandle函数前后不需要打开控制台屏幕缓冲区句柄?

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <Windows.h>
int main(void)
{
    printf("123\n");
    HANDLE hOut = NULL;  //定义句柄类型的变量并初始化
    hOut = GetStdHandle(STD_OUTPUT_HANDLE); //获取标准输出句柄

   SetConsoleTextAttribute(hOut,FOREGROUND_INTENSITY  | FOREGROUND_GREEN  | FOREGROUND_BLUE  | BACKEGROUND_BLUE);//设置蓝背景、亮青色文本
   printf("黑马程序员\n");
    SetConsoleTextAttribute(hOut, 10); //设置文本属性为青色
    SetConsoleTextAttribute(hOut, 3);  //设置文本属性为蓝色
    printf("黑马程序员\n");

    CloseHandle(hOut); //关闭句柄

    printf("123\n");

    system("pause");
    return 0;
}

刚接触windows.h头文件,像上文代码,

1.为什么没有打开控制台屏幕缓冲区的句柄就直接用windows.h的函数进行设置控制台,

2.为什么最后又关闭句柄?没打开句柄,只是获取句柄,且为什么关闭句柄

3.试验了关闭句柄后打printf 无法输出,光标不动。为什么会这样?

4.请问想系统的学习windows.h进行学期末大作业 管理系统project的窗口设置能否推荐下方法,或者视频,在网上找不到具体的解析,也没有相关讨论群。

  • 写回答

1条回答 默认 最新

  • qzf1298420664 2023-08-02 17:57
    关注

    问题2的回答:不需要关闭句柄,关闭标准句柄的行为是错误的。在window.h的微软官方解释中明确指出了GetStdHandle()获得的句柄仅仅是复制了一份,句柄志向该控制台的缓冲区。关闭句柄代表关闭了缓冲区,导致无法输出。关闭句柄是一个错误的行为。

    评论

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能