PowerShell:打开和关闭“Num Lock”。

问题描述 投票:0回答:5

我希望能够打开和关闭键盘上的“Num Lock”键。我在网上和这里尝试了多个示例,但没有成功。这是我最接近解决方案的事情:

[void] [System.Reflection.Assembly]::LoadWithPartialName("'System.Windows.Forms")
[System.Windows.Forms.SendKeys]::SendWait("{NUMLOCK}")

上面的代码看起来可能有效,我看到键盘上的“Num Lock”指示灯闪烁了一秒钟,但它没有“粘住”。

powershell keyboard keypress
5个回答
30
投票

我也经历过和你一样的开/关闪烁。

这对我来说效果很好,尝试一下:

$wsh = New-Object -ComObject WScript.Shell
$wsh.SendKeys('{NUMLOCK}')

3
投票

无论如何,从键盘的角度来看,操作系统在使用

[System.Windows.Forms.SendKeys]::SendWait("{CAPSLOCK}")
时发送一组切换键(大写、滚动锁定、数字锁定),然后重置,但仅使用
WScript.Shell 发送单个事件
.


2
投票

在这里偶然发现一种方法来保持

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 的良好候选者。


0
投票
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 ;-)

-3
投票
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 
© www.soinside.com 2019 - 2024. All rights reserved.