Чтобы подражать некоторым клавишам, я должен отправить туда scancodes, для этого я использую функцию SendInput() из WinAPI, и в большинстве случаев он работает нормально, но как использовать его для отправки scancodes для таких ключей, как "Пауза"? Этот ключ генерирует 6-байтовый scancode (E1 1D 45 E1 9D C5), поскольку scancode в структурировании KEYBDINPUT имеет тип WORD, то есть позволяет использовать scancodes до 2 байтов. Я попробовал scandode 1D45 и 9DC5 с флагом KEYEVENTF_EXTENDEDKEY, предлагая использовать E0\E1 код в зависимости от содержимого. Я также попытался отправить последовательности из шести 1 байтовых команд. Но все это не работает.
Я нашел ответ. Вы должны отправить два входа в свой массив для SendInput. Первая запись будет 0xE0, а вторая запись будет вашим scancode.
Я нашел решение здесь, встроенное в графику: https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-6.0/aa299374(v=vs.60)
См. Код. Это С#, но вы получите эту идею.
inputs = new[]
{
new WinAPI.INPUT
{
type = WinAPI.INPUT_KEYBOARD,
u = new WinAPI.InputUnion
{
ki = new WinAPI.KEYBDINPUT()
{
wScan = (ushort) 0xe0,
wVk = (ushort) 0,
dwFlags = (ushort) dwFlags,
dwExtraInfo = WinAPI.GetMessageExtraInfo()
}
}
},
new WinAPI.INPUT
{
type = WinAPI.INPUT_KEYBOARD,
u = new WinAPI.InputUnion
{
ki = new WinAPI.KEYBDINPUT()
{
wScan = (ushort) tscancode,
wVk = (ushort) tvk,
dwFlags = (ushort) dwFlags,
dwExtraInfo = WinAPI.GetMessageExtraInfo()
}
}
}
};