Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.02 c
1-1222244774
andreoman
2008-09-24 12:26
2009.11.01
как узнать в событии OnExit новый активный объект


2-1252654969
eu1bc
2009-09-11 11:42
2009.11.01
Обработка ошибок


8-1198227742
T54
2007-12-21 12:02
2009.11.01
NTSC-PAL


6-1209327530
HHNick
2008-04-28 00:18
2009.11.01
много поточность и IdHTTPServer (Indy)


15-1251923407
Юрий
2009-09-03 00:30
2009.11.01
С днем рождения ! 3 сентября 2009 четверг