一切都通过VoiceMacro运行。
禁用/启用HOTAS端口的想法有一个“检查”,可通过错误告诉我HOTAS的状态。
当VoiceMacro启动时,它将运行CheckStick.ps1和CheckThrottle.ps1以提供错误状态。
使用Devcon禁用或重新启用操纵杆和油门(Hotas)将在所有示例中使用STICK
devcon.exe disable *PID_2221
devcon.exe restart *PID_2221
如果Devcon无法重新启动HOTAS(有时)(我的LED灯不亮)
Enable-PnpDevice -InstanceId "USB\\VID_0738&PID_2221&MI_00\\76&B2A6FE&4&0000" -confirm:$false
然后再次运行devcon
(有时可行)
CheckStick.ps1下面的代码检查操纵杆状态
$USBDevice = Get-PnpDevice | Where-Object { $_.InstanceId -match 'HID\\VID_0738&PID_2221&MI_00\\7&398F21D&0&0000' }; if ($USBDevice.Status -eq 'OK') { exit 0 } Else { exit 1 }
我无法将错误代码添加到VoiceMacro Enabled(0)或Disabled(1)中,如果粘贴到Powershell框中,则上述代码有效,但在其他任何地方都无法使用,只能获得Disabled(1)错误代码>
我尝试了一个无法使用的批处理文件:
@echo off
PowerShell -WindowStyle Hidden -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File "C\CheckStick.ps1"' -Verb RunAs}";
我被困住了,是否有更好的方法来完成所有这些工作?我的编码经验是复制和粘贴大量内容。
谢谢!
UPDATE可能已经解决了部分问题(过去的工作副本)
@ECHO OFF
SET SCRIPTNAME=%~d0%~p0%~n0.ps1
SET ARGS=%*
IF [%ARGS%] NEQ [] GOTO ESCAPE_ARGS
:POWERSHELL
PowerShell.exe -NoProfile -NonInteractive -NoLogo -ExecutionPolicy Unrestricted -Command "& { $ErrorActionPreference = 'Stop'; & '%SCRIPTNAME%' @args; EXIT $LASTEXITCODE }" %ARGS%
EXIT /B %ERRORLEVEL%
:ESCAPE_ARGS
SET ARGS=%ARGS:"=\"%
SET ARGS=%ARGS:`=``%
SET ARGS=%ARGS:'=`'%
SET ARGS=%ARGS:$=`$%
SET ARGS=%ARGS:{=`}%
SET ARGS=%ARGS:}=`}%
SET ARGS=%ARGS:(=`(%
SET ARGS=%ARGS:)=`)%
SET ARGS=%ARGS:,=`,%
SET ARGS=%ARGS:^%=%
GOTO POWERSHELL
带有.ps1文件
$USBDevice = Get-PnpDevice | Where-Object { $_.InstanceId -match 'HID\\VID_0738&PID_A221&MI_00\\7&1007BFFD&0&0000' };if ($USBDevice.Status -eq 'OK') { exit 0 } Else { exit 1 }