Фон:
Я посылаю нажатия клавиш в программу (текстовый редактор), которую я скрываю, а затем отправляю клавишу F7 и после этого четыре клавиши текста (вид пароля)).Я использую JNA Library и функцию SendMessage Win32API для отправки сообщений, не могу использовать sendInput (), потому что мне нужно отправить на определенный дескриптор окна.
Код:
private static void sendInputToWindow(WinDef.HWND editorWindowHandle, char[] password) throws InterruptedException {
User32.INSTANCE.ShowWindow(editorWindowHandle, WinUser.SW_HIDE);
User32.INSTANCE.SetForegroundWindow(editorWindowHandle);
User32.INSTANCE.SetFocus(editorWindowHandle);
//F7 KEY SENT
WinDef.WPARAM wparam = new WinDef.WPARAM(F7_VIRTUAL_KEY);
WinDef.LPARAM lparam = new WinDef.LPARAM(0);
log.debug("SENDING F7");
User32.INSTANCE.SendMessage(editorWindowHandle, WinUser.WM_KEYDOWN, wparam, lparam);
Thread.sleep(1000);
log.debug("SENDING PASSWORD");
// PASSWORD SENT
User32.INSTANCE.SendMessage(editorWindowHandle, WinUser.WM_CHAR, new WinDef.WPARAM(password[0]), lparam);
User32.INSTANCE.SendMessage(editorWindowHandle, WinUser.WM_CHAR, new WinDef.WPARAM(password[1]), lparam);
User32.INSTANCE.SendMessage(editorWindowHandle, WinUser.WM_CHAR, new WinDef.WPARAM(password[2]), lparam);
User32.INSTANCE.SendMessage(editorWindowHandle, WinUser.WM_CHAR, new WinDef.WPARAM(password[3]), lparam);
Thread.sleep(500);
log.debug("SENDING ENTER");
// ENTER KEY SENT
User32.INSTANCE.SendMessage(editorWindowHandle, WinUser.WM_KEYDOWN, new WinDef.WPARAM(ENTER_KEY), lparam);
}
Проблема:
Когда я посылаю нажатия клавиш через SendMessage, через некоторое время или случайным образом (я не знаю, что является причиной проблемы здесь), но иногда этоне отправляет нажатия клавиш вообще!
Таким образом, это ситуация попадания или пропуска, в большинстве случаев она посылает нажатия клавиш, а в других - нет.Интересно, есть ли лучший способ отправить нажатия клавиш в скрытое окно?или если я здесь что-то не так делаю.
Спасибо.