在初始化输出后获取控制台大小

Getting console size after Initialize the output

本文关键字:控制台 获取 初始化 输出      更新时间:2023-10-16

我正在创建一个跨平台的应用程序,为此我正在打开GCC/Mingw的头源代码文件,并在需要时将定义从那里复制到我的头文件。项目到目前为止运行正确,但现在出现了错误,代码是

console.c

     #include<console.h>
     HANDLE write_Console

int get_console_size(){
    if( ( write_Console = CreateFile( "CONOUT$", 
                  GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ | 
                  FILE_SHARE_WRITE, 0L, OPEN_EXISTING, 
                  FILE_ATTRIBUTE_NORMAL, 0L) ) == (HANDLE) -1 
             ) {
        printf("opened");
    }
    }

void console_settings_init(){
    //For writing on the console
    write_Console = GetStdHandle(STD_OUTPUT_HANDLE);
    //For Reading from Console
    read_Console = GetStdHandle(STD_INPUT_HANDLE);
    // Set up the required window size:
    SMALL_RECT windowSize = {0, 0, CONSOLE_WIDTH-1, CONSOLE_HEIGHT-1};
    // Change the console window size:
    SetConsoleWindowInfo(write_Console, TRUE, &windowSize);

    // Create a COORD to hold the buffer size:
    COORD bufferSize = {CONSOLE_WIDTH, CONSOLE_HEIGHT};
    // Change the internal buffer size:
    SetConsoleScreenBufferSize(write_Console, bufferSize);
    recheck_console():
}

*如果我不写get_console_size函数,那么它会编译得很好*

但是在添加get_console_size之后,它会产生以下错误,CreateFile函数为__cdecl:

 console.c:(.text+0x4a): undefined reference to `_CreateFile'

但是当我试图用__declspec(dllimport)编译它时,它产生以下错误:

 console.c:(.text+0x4a): undefined reference to `__imp__CreateFile'

GCC编译命令使用:

 gcc -DHAVE_CONFIG_H -I. -I..  -I../include    
     -nostdinc -Wall -fno-builtin -Wno-pragmas -Werror -MT 
      console.o -MD -MP -MF .deps/console.Tpo -c -o console.o console.c
      mv -f .deps/console.Tpo .deps/console.Po

在谷歌上搜索后,我发现它是在Kernel32.dll中内置的功能。

现在,我只想验证控制台大小是否正确设置?

可以使用任何其他方法或任何其他东西来完成吗?

_imp_CreateFile和' _CreateFile函数是什么?它们在哪里定义?

如何链接windows Kernel32.dll与GCC项目?

在Windows上,那么我想你要做的事情在这里已经解释了。基本上,链接的文章调用AllocConsole来获取一个新控制台的句柄,然后调用GetConsoleScreenBufferInfo来获取关于控制台的元数据,比如它的宽度和高度。