我有以下代码要写入 Windows 命令控制台:
use Win32::Console;
my $console = new Win32::Console(Win32::Console::STD_ERROR_HANDLE());
my $defaultAttribute = $console->Attr();
my $defaultFG = ($defaultAttribute & 0x0F);
my $defaultBG = ($defaultAttribute & 0xF0);
$console->Attr($defaultBG | $Win32::Console::FG_LIGHTGREEN);
$console->Write("blah blah");
$console->Attr($defaultAttribute);
如果用户在调用我的脚本时重定向 STDERR,此代码将失败:
perl myscript.pl 2> foo
如何在不参考标准句柄之一的情况下获得该进程所附加到的 Win32 控制台的句柄,以便用户进行何种重定向无关紧要?
我想要的效果是能够在正常程序输出之后立即在控制台上写一条消息,而不管以与 bash 内置time
命令类似的方式进行的任何重定向。本质上,类似于/dev/tty
在 Unix 中打开和写入。
我试图my $console = new Win32::Console()
分配一个新的控制台,$console->Display()
但这完全是错误的。