Текущий архив: 2009.11.01;
Скачать: CL | DM;
Вниз
Не работает сочетание клавиш alt+1 (PostMessage) Найти похожие ветки
← →
GrieVeR-13 © (2009-08-06 23:40) [0]Здраствуйте.
PostMessage(h,WM_SYSKEYDOWN,VK_MENU,0);
PostMessage(h,WM_CHAR,ord("Q"),0);
PostMessage(h,WM_SYSKEYUP,VK_MENU,0);
Работает нормально (посылаю в игру).
но меняю ord("Q") на ord("1") и комбинация отказывается срабатывать.
Помогите найти проблему, пожалуйста.
← →
Leonid Troyanovsky © (2009-08-07 09:49) [1]
> GrieVeR-13 © (06.08.09 23:40)
> Помогите найти проблему, пожалуйста.
Проблема может быть не одна.
Главная из них в том, что нажатие комбинации клавиш,
как, впрочем, и одиночное нажатие невозможно эмулировать
_точно_ путем Post(Thread/Send)Message. Поэтому, реакция на
оную эмуляцию у разных приложений разная.
Вторая может быть в том, что игра может использовать DirectX,
что может накладывать дополнительные ограничения.
Наиболее точно можно эмулировать нажатия через SendInput
or keybd_event, однако только для foreground потока
(хотя, честно говоря, неактивные приложения и вовсе не
обязаны обрабатывать клавиатурный ввод).
--
Regards, LVT.
← →
GrieVeR-13 © (2009-08-07 16:13) [2]Но игра прекрасно реагирует на другие комбинации. И только на альт+цифра не получается. (А просто цифра работает).
Также я пробовал, если послать просто PostMessage(h,WM_CHAR,ord("1"),0); и в этом время держать альт самому - работает, а наоборот - (послать альт и затем нажать "1") - нет.
← →
GrieVeR-13 © (2009-08-09 03:26) [3]Вот облом.. никто так и не ответил, а это для меня очень важно, может есть другой способ вызвать эту комбинацию?
← →
Leonid Troyanovsky © (2009-08-09 08:47) [4]
> GrieVeR-13 © (09.08.09 03:26) [3]
> важно, может есть другой способ вызвать эту комбинацию?
SendInput, see also [1].
Можно поискать winsight or spy генерируется ли на искомых
комбинациях WM_COMMAND и SendMessage уже оных.
--
Regards, LVT.
← →
GrieVeR-13 © (2009-08-09 15:40) [5]WM_SYSKEYDOWN Dispatched 12h 18d VK_MENU Scan 38h Alt Down
WM_SYSKEYDOWN Dispatched 31h 49d VK_1 Scan 02h Alt Down
WM_SYSCHAR Dispatched 31h 49d "1" Scan 02h Alt Down
WM_MENUCHAR Sent Closed
WM_KEYUP Dispatched 12h 18d VK_MENU Scan 38h Up
WM_KEYUP Dispatched 31h 49d VK_1 Scan 02h Up
Вот что мне выдал WinSight.
Перепробовал все комбинации с вм_командами. Глухо.
← →
Leonid Troyanovsky © (2009-08-09 17:42) [6]
> GrieVeR-13 © (09.08.09 15:40) [5]
> WM_SYSKEYDOWN Dispatched 12h 18d VK_MENU Scan 38h Alt Down
..
> WM_KEYUP Dispatched 12h 18d VK_MENU Scan 38h Up
Не симметричный ответ :)
See SendInput.
--
Regards, LVT.
← →
GrieVeR-13 © (2009-08-10 23:51) [7]К сожалению, сендинпут только для активного окна. Так что я в безысходном положении.
← →
KilkennyCat © (2009-08-11 01:59) [8]нумпадность не влияет?
← →
GrieVeR-13 © (2009-08-12 21:52) [9]на Альт+Нумпад_1 даже в игре не отвечает.
← →
Leonid Troyanovsky © (2009-08-12 22:15) [10]
> GrieVeR-13 © (12.08.09 21:52) [9]
> на Альт+Нумпад_1 даже в игре не отвечает.
Независимо от нумлока?
Теперь можно впадать в отчаяние - пистолет мы не нашли [ОНО]
Прежде чем пытаться генерировать последовательности из [5]
путем Post(Send)Message предлагаю переобосновать тезис о
невозможности работы с foreground окном исследуемой игры.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2009-08-12 22:33) [11]
> GrieVeR-13 © (07.08.09 16:13) [2]
> Также я пробовал, если послать просто PostMessage(h,WM_CHAR,
> ord("1"),0); и в этом время держать альт самому - работает
Гм..
Можно испытать AttachThreadInput к целевому потоку и SetKeyboardState
для установки там VK_MENU перед SendMessage(..WM_CHAR, ord("1")..), но,
AFAIK, сработает такая уловка не позжее секунды после потери целевым
потоком фокуса ввода (прям как в той сказке про Золушку).
--
Regards, LVT.
← →
Leonid Troyanovsky © (2009-08-12 22:42) [12]
> Leonid Troyanovsky © (12.08.09 22:33) [11]
> AFAIK, сработает такая уловка не позжее секунды после потери
Хотя, если принять [2] безоговорочно, то можно обойтись и без
Attach, простым SetKeyboardState & PostMessage.
--
Regards, LVT.
← →
имя (2009-09-08 18:34) [13]Удалено модератором
Страницы: 1 вся ветка
Текущий архив: 2009.11.01;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.018 c