当前位置:   article > 正文

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

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

由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是指向内核对象的指针或者句柄。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/631245
推荐阅读
相关标签
  

闽ICP备14008679号