获得角色属性

时间:2014-12-05 21:40:18

标签: c windows winapi console

使用WinAPI获取位于屏幕控制台的y行和x列的字符的属性。 这是我在调用控制台光标设置到指定位置的GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &nativeData);后尝试执行的操作。这不会奏效。它将返回最后使用的属性更改。

如何获取位置上所有字符使用的属性?


修改 我用来测试ReadConsoleOutput()的代码:http://hastebin.com/atohetisin.pl 它会抛出垃圾值。

1 个答案:

答案 0 :(得分:1)

我发现了几个问题:

  • 没有错误检查。您必须检查ReadConsoleOutput和其他函数的返回值,如文档所述。如果函数失败,则必须调用GetLastError()以获取错误代码。如果你没有检查错误,你就会失明。

  • 您没有分配缓冲区来接收数据。(当然,文档容易混淆地暗示它为您分配缓冲区,但这显然是错误的,因为它无法返回指向它的指针此外,示例代码清楚地表明您必须自己分配缓冲区。我已经添加了一个注释。)

  • 看起来好像你打算阅读你写的字符,但是你正在写(10,5)并从(0,0)读。

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

考虑到最后两点,我想也许你有dwBufferCoordlpReadRegion混淆了,虽然我不确定你的坐标(200,50)是什么意思。

  • 您将CHAR_INFO解释为最终printf语句中的整数。 CHAR_INFO的第一个元素是字符本身,而不是属性。您可能想说chiBuffer[0].Attributes而不仅仅是chiBuffer[0]。 (当然,由于chiBuffer指向随机存储器地址,因此目前没有实际意义。)

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