将键盘输入从被调用进程重定向到调用程序

问题描述

我正在使用 { "servers": [ { "url": "http://my.api.server.com/","description": "API server" } ],"components": { "securitySchemes": { "OAuth2": { "type": "oauth2","flows": { "authorizationCode": { "scopes": { "write": "modify objects in your account","read": "read objects in your account" },"authorizationUrl": "https://example.com/oauth/authorize","tokenUrl": "https://example.com/oauth/token" } } } } },"security": [ { "OAuth2": [ "write","read" ] } ] } 调用 vlc 来播放音频文件。我想捕获这个 vlc 进程的键盘输入。按下的键不应该传递给 vlc,而是传递给我的调用程序,这样我就可以使用 start-process 或类似的东西进行检查。怎么做?

$host.UI.RawUI.KeyAvailable

解决方法

我在循环中调用此函数 PlaySong:

function LoopSong {
    while ($true) {
        PlaySong $d[$Nr] $CurrentSpeed
        if ($host.UI.RawUI.KeyAvailable) {
            $key = $host.UI.RawUI.ReadKey() 
            break 
        }
    }
   # ...
}

vlc 选项 -I dummy 禁用 GUI,播放时的所有键盘输入都将被缓冲,并在返回后可用于 ReadKey()。