2014-11-25 4 views
0

Я пишу программу, чтобы автоматически отключать зарядное устройство, когда моя батарея доходит до 80%, но я бы хотел, чтобы у меня была переопределенная комбинация клавиш.Обнаружить конкретное нажатие клавиши в Powershell

Я использую Powershell для взаимодействия с Arduino, который легче отключает мой удаленный выход, и у меня почти все кодирование работает, я просто не могу найти способ заставить Powershell контролировать для конкретной комбинации нажатий клавиш (например, cntrl + alt + c), а затем просто включите зарядное устройство и проигнорируйте остальные. В принципе, мне просто интересно, есть ли способ, чтобы переменная оставалась ложной до тех пор, пока я не введу конкретное нажатие клавиши (даже если вы работаете в другом окне в лучшем случае), а затем измените ее значение на true. В настоящее время я проверяю уровень заряда программы каждые пять минут, поэтому я думал, что могу также проверить значение указанной переменной до перехода на каждый интервал.

Если нет, существует ли способ выполнить такой же тип коммутатора, чтобы при вводе значения в консоль в любое время переменная изменила значения, но все же остальная часть кода будет работать, пока программа слушать этот вход?

Благодаря

+0

Захват ввода клавиатуры в PowerShell будет работать только до тех пор, пока PowerShell имеет фокус. – Paul

+0

взгляните на этот замечательный модуль, сделанный сотрудником Microsoft: [PSReadline] (https://github.com/lzybkr/PSReadLine) –

ответ

0

Существует пример для низкого уровня клавиатуры подсекать в C# here. Вы должны иметь возможность плагиатировать/конвертировать/модифицировать этот пример для вашего собственного использования.

Основная идея заключается в том, что вам нужно подключиться к неуправляемому коду, чтобы сделать это во всех процессах. Вам нужно будет использовать GetModuleHandle, чтобы получить дескриптор вашего приложения, передать этот дескриптор в SetWindowsHookEx, чтобы зарегистрировать обратный вызов, CallNextHookEx, чтобы передать цепочку, и UnhookWindowsHookEx, чтобы удалить его, когда вы закончите. Внутри вашего обратного вызова вы сможете оценить параметры, чтобы определить, нажата ли клавиша, которую вы ищете. Существует множество примеров звонков от Powershell into the WinAPI.

+0

Plesse включите основные пункты ссылки в свой ответ. В противном случае он станет недействительным, если ссылка опустится – Paul

Смежные вопросы