C 获取角色属性
使用WinAPI获取位于屏幕控制台y行和x列中的字符的属性。 这就是我在调用C 获取角色属性,c,windows,winapi,console,C,Windows,Winapi,Console,使用WinAPI获取位于屏幕控制台y行和x列中的字符的属性。 这就是我在调用GetConsoleScreenBufferInfo(GetStdHandle(STD\u OUTPUT\u HANDLE),&nativeData)后试图做的事情其中控制台光标设置为指定位置。这行不通。它将返回上次使用的属性更改 如何获取所有角色位置上使用的属性 编辑: 我用来测试的代码ReadConsoleOutput(): 它抛出垃圾值。我从脑海中看到了几个问题: 无错误检查。您必须检查ReadConsoleO
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管理事情的方式)。最好的场景是有人说这是我需要的函数,并为我提供一个示例,说明如何使用尽可能少的代码。