![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не работает сочетание клавиш alt+1 (PostMessage)
GrieVeR-13 © (2009-08-06 23:40:00)Здраствуйте.
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') и комбинация отказывается срабатывать.
Помогите найти проблему, пожалуйста.
(2009-09-08 18:34:00) [1]Удалено модератором
Leonid Troyanovsky (2009-08-12 22:42:00) [2]
> Leonid Troyanovsky © (12.08.09 22:33) [11]
> AFAIK, сработает такая уловка не позжее секунды после потери
Хотя, если принять [2] безоговорочно, то можно обойтись и без
Attach, простым SetKeyboardState & PostMessage.
--
Regards, LVT.
Leonid Troyanovsky (2009-08-12 22:33:00) [3]
> 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:15:00) [4]
> GrieVeR-13 © (12.08.09 21:52) [9]
> на Альт+Нумпад_1 даже в игре не отвечает.
Независимо от нумлока?
Теперь можно впадать в отчаяние - пистолет мы не нашли [ОНО]
Прежде чем пытаться генерировать последовательности из [5]
путем Post(Send)Message предлагаю переобосновать тезис о
невозможности работы с foreground окном исследуемой игры.
--
Regards, LVT.
GrieVeR-13 (2009-08-12 21:52:00) [5]на Альт+Нумпад_1 даже в игре не отвечает.
KilkennyCat (2009-08-11 01:59:00) [6]нумпадность не влияет?
GrieVeR-13 (2009-08-10 23:51:00) [7]К сожалению, сендинпут только для активного окна. Так что я в безысходном положении.
Leonid Troyanovsky (2009-08-09 17:42:00) [8]
> 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-09 15:40:00) [9]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 08:47:00) [10]
> 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 03:26:00) [11]Вот облом.. никто так и не ответил, а это для меня очень важно, может есть другой способ вызвать эту комбинацию?
GrieVeR-13 (2009-08-07 16:13:00) [12]Но игра прекрасно реагирует на другие комбинации. И только на альт+цифра не получается. (А просто цифра работает).
Также я пробовал, если послать просто PostMessage(h,WM_CHAR,ord('1'),0); и в этом время держать альт самому - работает, а наоборот - (послать альт и затем нажать '1') - нет.
Leonid Troyanovsky (2009-08-07 09:49:00) [13]
> GrieVeR-13 © (06.08.09 23:40)
> Помогите найти проблему, пожалуйста.
Проблема может быть не одна.
Главная из них в том, что нажатие комбинации клавиш,
как, впрочем, и одиночное нажатие невозможно эмулировать
_точно_ путем Post(Thread/Send)Message. Поэтому, реакция на
оную эмуляцию у разных приложений разная.
Вторая может быть в том, что игра может использовать DirectX,
что может накладывать дополнительные ограничения.
Наиболее точно можно эмулировать нажатия через SendInput
or keybd_event, однако только для foreground потока
(хотя, честно говоря, неактивные приложения и вовсе не
обязаны обрабатывать клавиатурный ввод).
--
Regards, LVT.