我正在尝试编写一个供个人使用的跨平台 PHP 实用程序,而不是重新发明任何东西。 代码将在或多或少的范围内运行
while (true) {
$key = null;
$key = check_key_pressed();
if ($key) do_relevant_magic($key);
usleep(250000);
}
我需要
check_key_pressed()
的东西,它将返回按下的键的值,而不是等待 EOF/EOL
,在实际按下任何键之前不明确要求输入。
这必须在*nix和windows上工作所以
ncurses
不是一个选项。我也不希望 exec
调用外部 vbs 或 bash 脚本,它必须完全用 PHP 完成,希望我不要期望太多。
编辑:当然,我检查了其他 SO 解决方案,但似乎没有一个是真正跨平台的。
Ncrurses
和 readline
在 Windows 上不可用,这必须拦截 keydown 或 keypress 或 input ready 在 linux 和 windows 上。
不幸的是,如果没有针对 Windows 的类似平台特定扩展(如 *n*x(
readline
,ncurses
)),这是不可能的(直到今天)。
更糟糕的是,即使您放弃了跨平台要求,我怀疑在 Windows 上是否有任何这样的(相当知名的)扩展。 (人们倾向于推荐自己为pdcurses(至少本身是跨平台的)编写绑定,因为显然还没有人完成并发布一个。)
事情进展缓慢,至少
readline
扩展现在可用于Windows(自7.1起),但它恰好只是缺少无缓冲的字符读取功能...
截至 2023 年,Windows 仍然没有原生解决方案。但是,可以通过 PHP COM 扩展拦截密钥。此处提供了适用于 Windows x64 平台和支持 readline 的 *nix 的完整解决方案:
https://github.com/zenithies/php-toolkit-read-key
如果你喜欢,你可以自己制作,食谱: