[C.C++] c语言 对C程序在windows命令行输出读取并输出

821 0
Honkers 2025-3-13 20:25:04 | 显示全部楼层 |阅读模式

由chatgpt生成,彩笔修改并完善ing。

先这样,以后再改

  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include<string.h>
  5. int main()
  6. {
  7. int y,x;
  8. printf("dvdsvdsvd\n");
  9. printf("2592626huby 9498\n");
  10. printf(" 2592626huby 9498\n");
  11. // 获取标准输出句柄
  12. HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
  13. // 获取控制台窗口信息
  14. CONSOLE_SCREEN_BUFFER_INFO csbi;
  15. GetConsoleScreenBufferInfo(hStdout, &csbi);
  16. // 计算控制台窗口缓冲区的大小
  17. int bufferSize = csbi.dwSize.X * csbi.dwSize.Y;
  18. // 调整缓冲区的大小
  19. CHAR_INFO* buffer = (CHAR_INFO*) malloc(bufferSize * sizeof(CHAR_INFO));
  20. if (buffer == NULL) {
  21. printf("Error: failed to allocate memory.\n");
  22. return 1;
  23. }
  24. // 读取控制台窗口中的文本
  25. COORD bufferCoord = {0, 0};
  26. SMALL_RECT readRegion = {0, 0, csbi.dwSize.X - 1, csbi.dwSize.Y - 1};
  27. ReadConsoleOutput(hStdout, buffer, csbi.dwSize, bufferCoord, &readRegion);
  28. // 输出读取到的文本
  29. for (y = 0; y < csbi.dwSize.Y; y++) {
  30. int isEmptyLine = 1; // 默认为是空行
  31. for (x = 0; x < csbi.dwSize.X; x++) {
  32. char c = buffer[x + y * csbi.dwSize.X].Char.AsciiChar;
  33. char* lineStart = &buffer[y * csbi.dwSize.X];
  34. if (c != ' ') {
  35. isEmptyLine = 0; // 如果该行有非空字符,说明不是空行
  36. }
  37. }
  38. for (x = 0; x < csbi.dwSize.X; x++)
  39. if (!isEmptyLine) {
  40. // 只有不是空行才输出换行符
  41. for (x = 0; x < csbi.dwSize.X; x++){
  42. char c = buffer[x + y * csbi.dwSize.X].Char.AsciiChar;
  43. printf("%c",c);
  44. }
  45. printf("\n");
  46. }
  47. }
  48. free(buffer);
  49. return 0;
  50. }
复制代码

  1. typedef struct _CONSOLE_SCREEN_BUFFER_INFO {
  2. COORD dwSize;//COORD 结构,包含控制台屏幕缓冲区的大小(以字符列和行表示)。
  3. COORD dwCursorPosition;//包含控制台屏幕缓冲区中光标的列坐标和行坐标。
  4. WORD wAttributes;
  5. //由 WriteFile 和 WriteConsole 函数写入屏幕缓冲区或由 ReadFile 和 ReadConsole 函数回显到屏幕缓冲区的字符的属性。
  6. SMALL_RECT srWindow;//其中包含显示窗口左上角和右下角的控制台屏幕缓冲区坐标。
  7. COORD dwMaximumWindowSize;//其中包含控制台窗口的最大大小(以字符列和行表示,给定当前屏幕缓冲区大小和字体以及屏幕大小)。
  8. } CONSOLE_SCREEN_BUFFER_INFO;
  9. typedef struct _COORD {
  10. SHORT X; // horizontal coordinate
  11. SHORT Y; // vertical coordinate
  12. } COORD;
  13. HANDLE是指向内核对象的指针或者句柄。
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Honkers

荣誉红客

关注
  • 4010
    主题
  • 36
    粉丝
  • 0
    关注
这家伙很懒,什么都没留下!

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行