我用
WINAPI:ReadConsoleOutputCharacterA KERNEL32.DLL
这似乎有效,但如何处理输入和输出参数?特别是,如何获得
hConsoleOutput [in]控制台屏幕缓冲区的句柄。手柄 必须具有GENERIC_READ访问权限。有关更多信息,请参阅 控制台缓冲区安全性和访问权限。
答案 0 :(得分:2)
hConsoleOutput
只有一个合适的句柄。 ReadConsoleOutputCharacter
的一些用法示例可以在devel
目录(贡献)中找到。
此API用法示例:
\ Global variables in dictionary space just for learning,
\ -- don't use such approach, especially in multithreading.
VARIABLE lpNumberOfCharsRead
CREATE lpCharacter 5 CHARS ALLOT \ buffer for 5 chars
: XYC@ ( x y -- c )
16 LSHIFT OR >R \ COORD
0 lpCharacter C!
lpNumberOfCharsRead \ _Out_ LPDWORD lpNumberOfCharsRead
R> \ dwReadCoord
1 \ nLength \ to read
lpCharacter \ _Out_ LPTSTR lpCharacter
H-STDOUT
ReadConsoleOutputCharacterA ERR THROW
lpCharacter C@
;
\ test
0 0 XYC@ EMIT
有用的包装器:
: READOUT-CONSOLE-XY ( a-buf u x y -- a-buf u2 ior )
2SWAP 2>R 16 LSHIFT OR >R
0 SP@ R> ( 0 addr-cnt coord )
R> R@ H-STDOUT ( 0 addr-cnt coord u a-buf handle )
ReadConsoleOutputCharacterA ERR ( u2 ior )
R> -ROT
;
\ test
HERE 50 0 0 READOUT-CONSOLE-XY THROW TYPE