Você pode alternar facilmente o CAPS LOCK usando o PowerShell, apenas importe alguma mágica do teclado virtual de user32.dll
:
$importDef = @"
using System.Runtime.InteropServices;
public class CapsControls
{
enum virtKeys : int
{
vkCaps = 0x14
}
[DllImport("user32.dll")]
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);
[DllImport("user32.dll")]
static extern short GetKeyState(virtKeys nVirtKey);
public static void ToggleCaps()
{
keybd_event(virtKeys.vkCaps, 0x45, 0x1, 0);
keybd_event(virtKeys.vkCaps, 0x45, 0x3, 0);
}
public static void EnableCaps()
{
if((GetKeyState(virtKeys.vkCaps) % 2) == 0)
{
ToggleCaps();
}
}
public static void DisableCaps()
{
if((GetKeyState(virtKeys.vkCaps) % 2) != 0)
{
ToggleCaps();
}
}
}
"@
Add-Type -TypeDefinition $importDef
Agora você pode controlar o caps lock em uma sessão do PowerShell:
[CapsControls]::ToggleCaps() # simulate a CAPS key press
[CapsControls]::EnableCaps() # if disabled, CAPS key press
[CapsControls]::DisableCaps() # if enabled, CAPS key press
Se possível, invoque-o a partir do aplicativo, mas você pode usar uma tarefa agendada para executar o comando toda vez que o aplicativo for iniciado