Я пытаюсь повторить сообщение CTRL + СТРЕЛКА ВВЕРХ, но это похоже на игнорирование клавиши CTRL, в результате получается только отправка СТРЕЛКИ ВВЕРХ без отправки CTRL
Вот как выглядят результаты Spy ++:
CTRL KEYDOWN:
СТРЕЛКА ВВЕРХ КЛАВИША:
Клавиша со стрелкой вверх:
Клавиша CTRL:
Это код, который я использую:
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, uint lParam);
SendMessage(whandle, 0x100, 0x00000011, 0x011D0001);
SendMessage(whandle, 0x100, 0x00000026, 0x01480001);
SendMessage(whandle, 0x101, 0x00000026, 0xC1480001);
SendMessage(whandle, 0x101, 0x00000011, 0xC11D0001);
Я изменил эту подпись SendMessage, чтобы принимать KEYUP lParams:
private static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, uint lParam);
Может быть, подпись не так? Я действительно не знаю, что мне не хватает
Я не могу использовать SendKeys или любой метод, который требует установки окна спереди, он должен работать в фоновом режиме, а также SetKeyBoardState, который может повлиять на другие программы, работающие
РЕДАКТИРОВАТЬ:
Протестировано с PostMessage и я получаю те же результаты, клавиша CTRL игнорируется
PostMessage(whandle, 0x100, 0x00000011, 0x011D0001);
PostMessage(whandle, 0x100, 0x00000026, 0x01480001);
PostMessage(whandle, 0x101, 0x00000026, 0xC1480001);
PostMessage(whandle, 0x101, 0x00000011, 0xC11D0001);