Как обрабатывать нажатие нескольких клавиш одновременно в PowerShell? Например: Windows lo go, клавиша + Alt + PrtScn: - PullRequest
1 голос
/ 27 марта 2020

Пробовал приведенный ниже код в PowerShell ISE, но он принимает только 1-ую клавишу (Нажатие Win ), после чего он принимает следующую клавишу как «g».

[void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[System.Windows.Forms.SendKeys]::sendwait("(^{ESCAPE})g")

Но я хочу нажать Win + g одновременно, чтобы открыть некоторые приложения, такие как игровая панель xbox.

Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 27 марта 2020

Это невозможно сделать с помощью встроенного метода SendWait, но мы можем использовать WinAPI для этого, как показано здесь https://social.msdn.microsoft.com/Forums/vstudio/en-US/f2d88949-2de7-451a-be47-a7372ce457ff/send-windows-key?forum=csharpgeneral

$code = @'
namespace SendTheKeys {
  class SendIt {
   public static void Main(string[] args) {
    [System.Runtime.InteropServices.DllImport("user32.dll")]
        private static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);

        private const int KEYEVENTF_EXTENDEDKEY = 1;
        private const int KEYEVENTF_KEYUP = 2;

        public static void KeyDown(Keys vKey)
        {
            keybd_event((byte)vKey, 0, KEYEVENTF_EXTENDEDKEY, 0);
        }

        public static void KeyUp(Keys vKey)
        {
            keybd_event((byte)vKey, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
        }
    KeyDown(Keys.LWin);
    KeyDown(Keys.G);
    KeyUp(Keys.LWin);
    KeyUp(Keys.G);
  }
 }
}
'@
Add-Type -TypeDefinition $code -Language CSharp
[SendTheKeys.SendIt]::Main()
...