43 lines
1.4 KiB
PowerShell
43 lines
1.4 KiB
PowerShell
|
|
param(
|
||
|
|
[Parameter(Mandatory=$true)]
|
||
|
|
[string]$Combo
|
||
|
|
)
|
||
|
|
|
||
|
|
Add-Type -Name WinKey -Namespace Win32 -MemberDefinition @'
|
||
|
|
[DllImport("user32.dll")]
|
||
|
|
public static extern void keybd_event(byte vk, byte sc, uint flags, System.UIntPtr extra);
|
||
|
|
'@
|
||
|
|
|
||
|
|
$VK = @{
|
||
|
|
'win'=0x5B; 'lwin'=0x5B; 'rwin'=0x5C;
|
||
|
|
'alt'=0x12; 'ctrl'=0x11; 'shift'=0x10;
|
||
|
|
'a'=0x41; 'b'=0x42; 'c'=0x43; 'd'=0x44; 'e'=0x45; 'f'=0x46;
|
||
|
|
'g'=0x47; 'h'=0x48; 'i'=0x49; 'j'=0x4A; 'k'=0x4B; 'l'=0x4C;
|
||
|
|
'm'=0x4D; 'n'=0x4E; 'o'=0x4F; 'p'=0x50; 'q'=0x51; 'r'=0x52;
|
||
|
|
's'=0x53; 't'=0x54; 'u'=0x55; 'v'=0x56; 'w'=0x57; 'x'=0x58;
|
||
|
|
'y'=0x59; 'z'=0x5A;
|
||
|
|
'up'=0x26; 'down'=0x28; 'left'=0x25; 'right'=0x27;
|
||
|
|
'tab'=0x09; 'esc'=0x1B; 'enter'=0x0D; 'space'=0x20; 'home'=0x24; 'end'=0x23;
|
||
|
|
'f1'=0x70; 'f2'=0x71; 'f3'=0x72; 'f4'=0x73; 'f5'=0x74; 'f6'=0x75;
|
||
|
|
'f7'=0x76; 'f8'=0x77; 'f9'=0x78; 'f10'=0x79; 'f11'=0x7A; 'f12'=0x7B;
|
||
|
|
}
|
||
|
|
|
||
|
|
$parts = ($Combo.ToLower() -split '\+') | ForEach-Object { $_.Trim() }
|
||
|
|
$codes = @()
|
||
|
|
foreach ($k in $parts) {
|
||
|
|
if (-not $VK.ContainsKey($k)) {
|
||
|
|
Write-Error "Unknown key: $k (in combo: $Combo)"
|
||
|
|
exit 2
|
||
|
|
}
|
||
|
|
$codes += [byte][int]$VK[$k]
|
||
|
|
}
|
||
|
|
|
||
|
|
foreach ($c in $codes) {
|
||
|
|
[Win32.WinKey]::keybd_event($c, 0, 0, [UIntPtr]::Zero)
|
||
|
|
}
|
||
|
|
Start-Sleep -Milliseconds 35
|
||
|
|
[array]::Reverse($codes)
|
||
|
|
foreach ($c in $codes) {
|
||
|
|
[Win32.WinKey]::keybd_event($c, 0, 2, [UIntPtr]::Zero)
|
||
|
|
}
|