为了获得控制台所显示过的内容:
我们需要从控制台的读出标准缓冲区里的文本,需要函数
readOutputCharacter() = 读取标准输出缓冲区文本import console;
import com;
//import process.popen;
console.open()
var fs = com.CreateObject("Scripting.FileSystemObject")
com.DumpTypeInfo(fs)
//输出得到的文本
console.dump(console.readOutputCharacter());
console.pause(true);
红色框里面的即是我们得到的控制台里面的文本,但是发现不是全的,只得到了一部分而已
这是怎么回事?怎么才能得到完整的文本内容?
去查看readoutputcharacter()这个函数,readOutputCharacter = function(){
var buffer = {WORD value[1000]}
var ok = ::Kernel32.ReadConsoleOutputCharacterW( getOutPutHandle(),buffer,1000,0,{INT charsRead})
return ..string.trim(buffer.value);
}
发现里面有个缓冲大小设置,其中ReadConsoleOutputCharacterW()
API函数ReadConsoleOutputCharacter,能从控制台缓冲区中读出文字并保存到变量中。但是网上关于这个API函数的资料 甚少,仅有声明代码。
翻阅外国网站,有给出例子,居然例子也有错误,实在害人不浅。本教程能教会你如何正确的使用 ReadConsoleOutputCharacter这个API函数。
ReadConsoleOutputCharacter的参数为:
ReadConsoleOutputCharacter(
HANDLE hConsoleOutput,
LPTSTR lpCharacter,
DWORD nLength,
COORD dwReadCoord,
LPDWORD lpNumbersOfCharsRead
)
参数详解:
HANDLE hConsoleOutput:
类型为HANDLE,控制台的输出句柄,可以通过API函数GetStdHandle获得
LPTSTR lpCharacter:
char型的指针,用于函数输出读出的文字。注意声明的时候,欲读出5个字符,则声明为char texts[4]
DWORD nLength:
DWORD型,需要读出的文字长度。大于当前行的部分将跳到下一行继续读(不读出回车符及换行符)
COORD dwReadCoord:
COORD型,读出文字的起始坐标
LPDWORD:
DWORD型的指针,用于函数输出读出文字的长度
例:
从(0,0)处读出5个字符:
HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
COORD rcd={0,0};
char texts[4];
DWORD read;
ReadConsoleOutputCharacter(hOut,texts,5,rcd,&read);
于是我们可以修改下这个函数:
buff和读出数量都改为3000看看结果:readOutputCharacter = function(){
var buffer = {WORD value[3000]}
var ok = ::Kernel32.ReadConsoleOutputCharacterW( getOutPutHandle(),buffer,3000,0,{INT charsRead})
return ..string.trim(buffer.value);
}
输出变多了,但是还不完整.
还有后面的乱码是什么鬼??