Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 获取角色属性_C_Windows_Winapi_Console - Fatal编程技术网

C 获取角色属性

C 获取角色属性,c,windows,winapi,console,C,Windows,Winapi,Console,使用WinAPI获取位于屏幕控制台y行和x列中的字符的属性。 这就是我在调用GetConsoleScreenBufferInfo(GetStdHandle(STD\u OUTPUT\u HANDLE),&nativeData)后试图做的事情其中控制台光标设置为指定位置。这行不通。它将返回上次使用的属性更改 如何获取所有角色位置上使用的属性 编辑: 我用来测试的代码ReadConsoleOutput(): 它抛出垃圾值。我从脑海中看到了几个问题: 无错误检查。您必须检查ReadConsoleO

使用WinAPI获取位于屏幕控制台y行和x列中的字符的属性。 这就是我在调用
GetConsoleScreenBufferInfo(GetStdHandle(STD\u OUTPUT\u HANDLE),&nativeData)后试图做的事情其中控制台光标设置为指定位置。这行不通。它将返回上次使用的属性更改

如何获取所有角色位置上使用的属性


编辑: 我用来测试的代码
ReadConsoleOutput()

它抛出垃圾值。

我从脑海中看到了几个问题:

  • 无错误检查。您必须检查ReadConsoleOutput和其他函数的返回值,如文档所示。如果函数失败,则必须调用GetLastError()以获取错误代码。如果你不检查错误,你就是瞎飞

  • 您不需要分配缓冲区来接收其中的数据。(当然,文档令人困惑地暗示它为您分配缓冲区,但这显然是错误的,因为它无法返回指向它的指针。此外,示例代码清楚地表明您必须自己分配缓冲区。我添加了一个注释。)

  • 看起来好像你本来打算读你写的字符,但是你写的是(10,5),读的是(0,0)

  • 调用ReadConsoleOutput时,您正在将设置为(10,5)的
    newpos传递为
    dwBufferCoord
    ,但您指定的缓冲区大小为(2,1)。目标坐标在缓冲区之外是没有意义的

把最后两点放在一起,我想你可能把
dwBufferCoord
lpReadRegion
弄糊涂了,尽管我不确定你的坐标(200,50)是什么意思

  • 在最后的
    printf
    语句中,您将
    CHAR\u INFO
    解释为一个整数。
    CHAR\u INFO
    的第一个元素是字符本身,而不是属性。您可能想说
    chiBuffer[0]。属性,而不仅仅是
    chiBuffer[0]
    。(当然,这目前还没有实际意义,因为
    chiBuffer
    指向一个随机内存地址。)

如果您确实想检索字符,首先需要确定控制台是Unicode还是ASCII模式,并相应地检索UnicodeChar或AsciiChar。

您看到了吗?@JonathanPotter可能是,但我正在从事一个巨大的项目,它将为控制台应用程序程序员的整个环境做出贡献,我不能浪费时间去做错事(我不喜欢windows管理事情的方式)。最好的场景是有人说这是我需要的函数,并为我提供一个示例,说明如何使用尽可能少的代码。