Четверг, 21.11.2024, 18:48 Приветствую вас Гость | Группа "Гости" 
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Anton93, Волк-1024, xXxSh@dowxXx  
Запуск скриптов из Делфи
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" не хочет запускаться ни в какую, быть может кто знает как решить эту проблему? wacko

вот сам скрипт:
Прикрепления: primer.ahk (0.9 Kb)


Сообщение отредактировал 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 не правильно сделана. Так нельзя класть в стек параметры для функции.


к моему удивлению она вполне рабочая! biggrin
 
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).

что же делать... sad

подскажите какой программой можно определить каким образом 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
Неужели нельзя ничего сделать, ни за что в это не поверю, как то же передаются клавиши в другие не менее дотошные программы... wacko
 
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); // Отпускаем эскейп
 
  • Страница 1 из 1
  • 1
Поиск:

delphicode.ru © 2008 - 2024 Хостинг от uCoz