如何在Forth中使用ReadConsoleOutputCharacterA?

时间:2015-06-01 18:11:57

标签: winapi console forth

我用

  

WINAPI:ReadConsoleOutputCharacterA KERNEL32.DLL

这似乎有效,但如何处理输入和输出参数?特别是,如何获得

  

hConsoleOutput [in]控制台屏幕缓冲区的句柄。手柄   必须具有GENERIC_READ访问权限。有关更多信息,请参阅   控制台缓冲区安全性和访问权限。

1 个答案:

答案 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