我正在尝试编写一个定期切换大写锁定键的脚本,但我也希望能够切换脚本,因为它会导致其他功能出现问题(例如alt选项卡,并在任务栏中滚动窗口以查看预览)
我到目前为止的剧本是
:outer while($true){
do{
echo "Toggle with F12";
$x = [System.Console]::ReadKey()
}while( $x.Key -ne "F12" )
while($true){
$wsh = New-Object -ComObject WScript.Shell
$wsh.SendKeys('{CAPSLOCK}')
sleep 0.3
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($wsh)
Remove-Variable wsh
if ($Host.UI.RawUI.KeyAvailable) {
$key = $Host.UI.RawUI.ReadKey()
if($key.Key -ne "F12"){
break outer
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
脚本等待用户按F12,然后一旦按下F12,我希望它开始切换大写锁定键0.3秒,直到用户再次按下F12.理想情况下,我希望这在背景中发生,但我不知道这是否可能.我不希望用户必须打开控制台窗口来切换脚本.
现在运行的方式是,在用户按下F12之后,脚本将切换一次,然后退出.如果我删除Remove-Variable之后的条件,脚本将按我的意愿运行,除非它可以停止的唯一方法是控制台窗口关闭.
这是一个尝试.顺便说一句,我将睡眠时间改为1秒,因此在测试时不会过多地闪烁死锁:
$continue = $true
while($continue)
{
if ([console]::KeyAvailable)
{
echo "Toggle with F12";
$x = [System.Console]::ReadKey()
switch ( $x.key)
{
F12 { $continue = $false }
}
}
else
{
$wsh = New-Object -ComObject WScript.Shell
$wsh.SendKeys('{CAPSLOCK}')
sleep 1
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($wsh)| out-null
Remove-Variable wsh
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20797 次 |
| 最近记录: |