使用WinAPI获取位于屏幕控制台的y行和x列的字符的属性。
这是我在调用控制台光标设置到指定位置的GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &nativeData);
后尝试执行的操作。这不会奏效。它将返回最后使用的属性更改。
如何获取位置上所有字符使用的属性?
修改
我用来测试ReadConsoleOutput()
的代码:http://hastebin.com/atohetisin.pl
它会抛出垃圾值。
答案 0 :(得分:1)
我发现了几个问题:
没有错误检查。您必须检查ReadConsoleOutput和其他函数的返回值,如文档所述。如果函数失败,则必须调用GetLastError()以获取错误代码。如果你没有检查错误,你就会失明。
您没有分配缓冲区来接收数据。(当然,文档容易混淆地暗示它为您分配缓冲区,但这显然是错误的,因为它无法返回指向它的指针此外,示例代码清楚地表明您必须自己分配缓冲区。我已经添加了一个注释。)
看起来好像你打算阅读你写的字符,但是你正在写(10,5)并从(0,0)读。
当您调用ReadConsoleOutput时,您将newpos
(设置为(10,5))传递为dwBufferCoord
,但您指定的缓冲区大小为(2,1)。目标坐标在缓冲区之外是没有意义的。
考虑到最后两点,我想也许你有dwBufferCoord
和lpReadRegion
混淆了,虽然我不确定你的坐标(200,50)是什么意思。
CHAR_INFO
解释为最终printf
语句中的整数。 CHAR_INFO
的第一个元素是字符本身,而不是属性。您可能想说chiBuffer[0].Attributes
而不仅仅是chiBuffer[0]
。 (当然,由于chiBuffer
指向随机存储器地址,因此目前没有实际意义。)如果您确实想要检索字符,首先需要确定控制台是处于Unicode还是ASCII模式,并相应地检索UnicodeChar或AsciiChar。