我希望能够打开和关闭键盘上的“Num Lock”键。我在网上和这里尝试了多个示例,但没有成功。这是我最接近解决方案的事情:
[void] [System.Reflection.Assembly]::LoadWithPartialName("'System.Windows.Forms")
[System.Windows.Forms.SendKeys]::SendWait("{NUMLOCK}")
上面的代码看起来可能有效,我看到键盘上的“Num Lock”指示灯闪烁了一秒钟,但它没有“粘住”。
我也经历过和你一样的开/关闪烁。
这对我来说效果很好,尝试一下:
$wsh = New-Object -ComObject WScript.Shell
$wsh.SendKeys('{NUMLOCK}')
无论如何,从键盘的角度来看,操作系统在使用
[System.Windows.Forms.SendKeys]::SendWait("{CAPSLOCK}")
时发送一组切换键(大写、滚动锁定、数字锁定),然后重置,但仅使用 WScript.Shell
发送单个事件
.
在这里偶然发现一种方法来保持
Num Lock
永远处于开启状态(显然“锁定”这个词没有多大意义🤷u200d♂️)。此脚本每 2 秒检查一次 Num Lock
状态,如果已关闭,则将其重新打开:
$wsh = New-Object -ComObject WScript.Shell
while($true){
if ([console]::NumberLock -eq $false) {
$wsh.SendKeys('{NUMLOCK}')
}
Start-Sleep 2
}
我认为它是使用 PS2EXE 转换为独立的小型 .exe 的良好候选者。
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
$myshell = New-Object -com "wscript.Shell"
while($true) {
$myshell.sendkeys('{CAPSLOCK}') # or NUMLOCK, or any
$sleepms = Get-Random -Minimum 10 -Maximum 1000 # random sleep between 10ms and 1000ms
Start-Sleep -Milliseconds $sleepms
}
# TODO; Conver to a MORSE blink generator ;-)
intTime=0
strInputVal=InputBox("Enter the time","Enter Hours in Int")
intTime=strInputVal * 60 * 60
set WshShell = WScript.CreateObject("WScript.Shell")
For i = 1 to intTime
WScript.Sleep 500
WshShell.SendKeys "{NUMLOCK}"
WScript.Sleep 500
Next
WScript.Quit
Set WshShell = Nothing