Запуск скриптов из Делфи
|
|
xXxSh@dowxXx | Дата: Среда, 14.03.2012, 22:06 | Сообщение # 1 |
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
| Всем привет, возник такой вопрос, как заставить работать "AutoHotkey Script" из своей программы..,дело в том что у меня уже есть скрипт, который через определенный промежуток времени нажимает кнопку UP (стрелка вверх), запускается скрипт в два захода, сначала активируется на "Insert" для того что бы его можно было отключать, потом включается на "End"..., так вот я уже 3й день пытаюсь решить задачу по его запуску из своей программы, пробовал разные эмуляции нажатия клавиш в делфи, что бы активировать скрипт, но ни один пример не работает, я так понял что сам "AutoHotkey Script" перехватывает нажатия клавиш на каком то другом уровне, хз как так...
вот методы которые я использовал в своей программе на делфи:
Code procedure EmulateKey(Wnd: HWND; VKey: Integer); asm push 0 push edx push 0101H //WM_KEYUP push eax push 0 push edx push 0100H //WM_KEYDOWN push eax call PostMessage call PostMessage end;
// Пример использования: EmulateKey(Edit1.Handle, VK_END);
так же пробывал вот этот пример: Code keybd_event(VK_END, 0, 0, 0); keybd_event(VK_END, 0, KEYEVENTF_KEYUP, 0);
и еще пару примеров такого же плана, но "AutoHotkey Script" не хочет запускаться ни в какую, быть может кто знает как решить эту проблему?
вот сам скрипт:
Сообщение отредактировал xXxSh@dowxXx - Среда, 14.03.2012, 22:10 |
|
| |
Волк-1024 | Дата: Четверг, 15.03.2012, 01:38 | Сообщение # 2 |
Авторитетный
Зарегистрирован: 24.07.2011
Группа: Модераторы
Сообщений: 469
Статус: Offline
| Процедура procedure EmulateKey не правильно сделана. Так нельзя класть в стек параметры для функции. Сомневаюсь вообще работа ли способная она.
P.S Не могу проверить т.к уже ночь и пишу со смарта.
Про остальное не знаю.
Pascal, C\C++, Assembler, Python
|
|
| |
xXxSh@dowxXx | Дата: Четверг, 15.03.2012, 12:11 | Сообщение # 3 |
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
| Quote (Волк-1024) procedure EmulateKey не правильно сделана. Так нельзя класть в стек параметры для функции.
к моему удивлению она вполне рабочая!
|
|
| |
xXxSh@dowxXx | Дата: Четверг, 15.03.2012, 13:49 | Сообщение # 4 |
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
| погуглил я немного и вот что откопал:
Многие игровые и не только программы опрашивают игровой контроллер и контроллер клавиатуры сами, не используя ОС и ее драйверы (также несложно, например, для работы с мышью не использовать функции операционной системы, а только функции BIOS). Таким программам нет никакого дела до VK_UP!
Надо искать документацию на контроллер из которой будет понятно, как этим контроллером управлять.
В общих чертах, для управления контроллером надо делать что-то типа
Код : asm in ПОРТ, КОМАНДА out ПРОРТ, КОМАНДА end;
Т.е. надо что-то писать в порты контроллера (или читать из них). Например, пусть для определения нажата ли кнопка ждойстика надо читать из порта П1, если там 1, то нажата, 0 - не нажата (Это только методический пример! На практике все может оказаться немного сложнее. Например, контроллер клавиатуры надо опрашивать после специального прерывания, а после опроса обязательно заприсать число 20h в порт 20h).
что же делать...
подскажите какой программой можно определить каким образом AutoHotkey Script отлавливает нажатие клавиш ?
Сообщение отредактировал xXxSh@dowxXx - Четверг, 15.03.2012, 15:26 |
|
| |
Волк-1024 | Дата: Четверг, 15.03.2012, 22:47 | Сообщение # 5 |
Авторитетный
Зарегистрирован: 24.07.2011
Группа: Модераторы
Сообщений: 469
Статус: Offline
| Ммм. Даже хз что подсказать...
Pascal, C\C++, Assembler, Python
|
|
| |
xXxSh@dowxXx | Дата: Пятница, 16.03.2012, 17:15 | Сообщение # 6 |
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
| Неужели нельзя ничего сделать, ни за что в это не поверю, как то же передаются клавиши в другие не менее дотошные программы...
|
|
| |
True_Hacker | Дата: Воскресенье, 03.08.2014, 21:05 | Сообщение # 7 |
Новичок
Зарегистрирован: 03.08.2014
Группа: Пользователи
Сообщений: 3
Статус: Offline
| Не совсем понял цель,ну если нужно отловить клавишу то создаешь таймер,ставишь где-то 500 или чуть меньше милесекунд а потом просто используешь GetKeyState(key)
Код procedure TForm1.Timer1Timer(Sender: TObject); var KeyState: Word; begin KeyState:=GetKeyState(70); // Код клавиши if KeyState and $8000 <> 0 then begin // Твои действия end; Добавлено (03.08.2014, 21:05) --------------------------------------------- А эмулировать клавиши лучше через PostMessage т.к обращается прямо к программе а не ищет куда бы влепить этот текст/клавишу
Код PostMessage(хэндл-окна, WM_KEYDOWN, VK_ESCAPE, 0); // Нажимаем эскейп PostMessage(хэндл-окна, WM_KEYUP, VK_ESCAPE, 0); // Отпускаем эскейп
|
|
| |