Total Annihilation

Форум сайта http://www.total-annihilation.org/
Текущее время: 19 авг 2018 22:51

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 66 ]  На страницу 1, 2, 3, 4, 5 ... 7  След.
Автор Сообщение
 Заголовок сообщения: Hotkeys - хоткеи для Escalation
СообщениеДобавлено: 06 авг 2012 23:24 
Не в сети
Аватара пользователя

Зарегистрирован: 12 ноя 2010 20:20
Сообщений: 193
В общем, открываю эту тему, так как она весьма наболевшая, и судя по форуму, не только для меня.

22.08.12 обновления

Сразу предупреждаю что я не специалист в программировании и не несу ответственности за возможное непредсказуемое поведение своих программ. Вы используете их на свой страх и риск.

Обновил проги: переименовал, назвал hkmacros - так как суть прог похожа на макросы автоматизации действий на компьютере.

На текущий момент их две: hkmacros_shareenergy и hkmacros_Esc_building

Проги все еще консольные, работают глобально, могут работать вместе, то есть не влияют друг на друга, каждая запущенная прога добавляет в систему присущие ей макросы.



Инструкция к: hkmacros_shareenergy

Прога пишет две строки: SHAREENERGY 1000 и SETSHAREENERGY 0
Каждой строке можно присвоить свой хоткей.

После того как прога запущена, хоткеи актевируються только если активна клавиша Caps Lock (еси лампочка горит).

Как пользоваться: нужно сделать ярлык экзэшника проги, и в его свойствах где записывается путь к файлу, дописать два числа, их нужно разделить пробелами между собой вот так:
Изображение

Первая цифра это виртуальный код первой клавиши которая выводит +shareenergy 1000, второй определяет код для +setshareenergy 0

Виртуальный код клавиш записывается в десятичной системе и максимальное значение 254 значение больше вводить нельзя
Но есть одна трудность, значения виртуальных клавиш в интернете (ну по крайней мере я так нашел) в шестнадцатеричной системе исчисления, а записывать в ярлык надо виртуальные коды клавиш в десятичной системе. Что делать:

Переводить числа в другие системы исчисления можно в калькуляторе виндовс. Он находится в пуск\программы\стандартные

Его нужно перевести в инженерный режим:
Изображение

Нажимаем на режим HEX:
Изображение

Отсюда берем код клавиши:

Способ [bl]:

  • Запускаем программу Таблица символов (Win+R -> charmap)
  • По умолчанию там будет шрифт Arial, но это не важно
  • Кликаем на символы 0..9 и A..Z (заглавные)
  • Смотрим код кнопки внизу слева (например U+005A для кнопки Z, искомый код: 5A)
  • Этот код шестнадцатиричный, его так же переводим через калькулятор в десятичную систему
  • Для цифровых и символьных кнопок коды совпадают, для остальных - вероятно, что нет

Или интернет ресурс:
http://vsokovikov.narod.ru/New_MSDN_API ... y_code.htm
Изображение

Затем вводим в калк:
Изображение

Теперь переключаем калкуль в жежим DEC, и число переводиться в десятичную систему:
Изображение

Далее записываем это значение в ярлык:
Изображение

Ну и таким же способом получаем второй хоткей и записываем его туда же через пробел.

После того как прога запущена появляется консоль программы, ее можно свернуть, пока она работает, глобальным образом перехватываются установленные хоткеи, и если хоткей нажат, путем эмуляции событий ввода клавиатуры, пишутся соответствующие строки. Закрытие консоли возвращает все на круги своя.

Инструкция к: hkmacros_Esc_building

Данная прога, пытается решить проблему дефицита хоткеев на строительство

Уже играл с этой пирогой, ДаркВамп после игры сказал что никогда в своей жижни не видел стоко ЛЛТ :hyhyhy:
Кому интересно, вот реплэй:
http://www.sendspace.com/file/l3lgd4

После того как прога запущена, хоткеи актевируються только если активна клавиша Caps Lock (еси лампочка горит). Хоткеи до сих пор работают глобально и проге неважно что запущено, от функции GetDword наконец таки удалось избавиться благодаря неоценимой помощи со стороны [bl], за сею помощь ему огромное спасибо, я сам болею за оптимизацию програм, рад что удалось зделать код оптимальнее по указке [bl].

Как работают хоткеи, прога тупо нажимает мышкой по определенному месту на экране, хоткеи активируються через Alt, я не нашол в тотале ни каких использующихся комбинаций с альтом, поэтому выбрал его в качестве селектора хоткеев. Таким образом чтобы выбрать кнопку меню построек, надо нажать комбинацию клавиш, например Alt - Q - чтобы нажать на ту кнопку где обычно у кома соляр. Если нажать хоткей через Alt - Ctrl - ..., то будет правое нажатие мышкой, это для от заказа в заводах. Вот расположение хоткеев:

Изображение



Проги тетировались мной в системе Windows XP SP2 , как в других системах работать будут предсказать не могу.

На данные проги могут ругаться антивирусы, особенно с про активной защитой, потому что в них использован механизм перехвата кнопок клавиатуры посредствам виндовс хуков (Windows Hook's), который часто используется для написания червей кейлогеров.


У вас нет доступа для просмотра вложений в этом сообщении.


Последний раз редактировалось RofLas 22 авг 2012 13:10, всего редактировалось 7 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Hotkeys - хоткеи для Escalation
СообщениеДобавлено: 07 авг 2012 14:29 
Не в сети
Золотой железяка
Золотой железяка

Зарегистрирован: 27 ноя 2011 20:49
Сообщений: 117
Сразу несколько мыслей:

1. Есть в коде такая функция:
Код:
DWORD GetDword(DWORD dwAdr)
{
   __asm{
      PUSH   EAX
      PUSH   EBX
      MOV      EBX,dwAdr
      MOV      EAX,[EBX]
      MOV      dwAdr,EAX
      POP      EBX
      POP      EAX
   }
   return dwAdr;
}

Её лучше убрать (мой MinGW не понимает такого :) ) и сделать так:
Код:
// Вместо DWORD GetDword(DWORD dwAdr)...
KBDLLHOOKSTRUCT* key;

...

LRESULT CALLBACK LLKeyProc(int nCode, WPARAM wParam, LPARAM lParam)
{
   if( nCode <= 0 ){

   key = (LPKBDLLHOOKSTRUCT)lParam;

      if( !(key->flags & LLKHF_INJECTED) ){ //проверка флага LLKHF_INJECTED

...

         if( key->vkCode == dwKey1 ){

...

         if( key->vkCode == dwKey2 ){

И код станет прозраченее и понятнее. :) Суть в чём: в lParam приходит указатель на структуру о нажатой клавише, надо просто создать свою структуру, а полученный указатель прикрепить к ней. Потом с ней так проще разбираться.

2. Наверно удобнее будет сделать вынесенные настройки кодов клавиш и соответствующих им макросов в отдельный ini-файл. Но это придётся парсер писать.

3. Поскольку макрос глобальный, то неплохо бы сделать проверку активного окна приложения, чтобы хук не посылал комбинацию в абсолютно все приложения. :)

PS: Ну и ещё бы придумать, как отключать его хотя бы временно, а то ведь никакое сообщение не наберешь в игре, если хотя бы одна из кнопок будет нажата.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Hotkeys - хоткеи для Escalation
СообщениеДобавлено: 07 авг 2012 16:25 
Не в сети
Аватара пользователя

Зарегистрирован: 12 ноя 2010 20:20
Сообщений: 193
bl писал(а):
Её лучше убрать (мой MinGW не понимает такого ) и сделать так:

Код:
// Вместо DWORD GetDword(DWORD dwAdr)...
KBDLLHOOKSTRUCT* key;

...

LRESULT CALLBACK LLKeyProc(int nCode, WPARAM wParam, LPARAM lParam)
{
   if( nCode <= 0 ){

   key = (LPKBDLLHOOKSTRUCT)lParam;

      if( !(key->flags & LLKHF_INJECTED) ){ //проверка флага LLKHF_INJECTED

...

         if( key->vkCode == dwKey1 ){

...

         if( key->vkCode == dwKey2 ){


И код станет прозраченее и понятнее. Суть в чём: в lParam приходит указатель на структуру о нажатой клавише, надо просто создать свою структуру, а полученный указатель прикрепить к ней. Потом с ней так проще разбираться.


Да, так действительно будет лучше, попробую переделать. Че надо структуру KBDLLHOOKSTRUCT описать отдельно?

bl писал(а):
2. Наверно удобнее будет сделать вынесенные настройки кодов клавиш и соответствующих им макросов в отдельный ini-файл. Но это придётся парсер писать.


В идеале так и стремлюсь написать, дорабатывать и дорабатывать еще.

bl писал(а):
3. Поскольку макрос глобальный, то неплохо бы сделать проверку активного окна приложения, чтобы хук не посылал комбинацию в абсолютно все приложения.


А я думал макросы в системною очередь вставляются

bl писал(а):
PS: Ну и ещё бы придумать, как отключать его хотя бы временно, а то ведь никакое сообщение не наберешь в игре, если хотя бы одна из кнопок будет нажата.


Это я круто не учел, надо доработать.


Последний раз редактировалось RofLas 21 авг 2012 22:01, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Hotkeys - хоткеи для Escalation
СообщениеДобавлено: 07 авг 2012 16:35 
Не в сети
Аватара пользователя

Зарегистрирован: 23 ноя 2011 22:37
Сообщений: 291
Еще хотел спросить. Есть файл

http://www.sendspace.com/file/oih70b

запрограммирован на вывод комманд на f11(комманды прописаны заранее внутри файла,но можно менять). Но на f11 я использую ta demo через ctrl f2.

Так вот, хотел спросить, не могли бы просто копернуть этот файл дважды и прописать, чтобы реагировала комманда на f9 и f10 соответственно.? Я думаю так бы людям было бы гораздо проще.

_________________
Satir in the past

Oh Frost,Froooost, not freezing me...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Hotkeys - хоткеи для Escalation
СообщениеДобавлено: 07 авг 2012 16:53 
Не в сети
Аватара пользователя

Зарегистрирован: 12 ноя 2010 20:20
Сообщений: 193
Frost писал(а):
Еще хотел спросить. Есть файл

http://www.sendspace.com/file/oih70b

запрограммирован на вывод комманд на f11(комманды прописаны заранее внутри файла,но можно менять). Но на f11 я использую ta demo через ctrl f2.


Че за файл и че за команды там прописаны? На F11 это же кнопка которая выводит команды записанные через Ctrl F2.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Hotkeys - хоткеи для Escalation
СообщениеДобавлено: 07 авг 2012 19:41 
Не в сети
Аватара пользователя

Зарегистрирован: 23 ноя 2011 22:37
Сообщений: 291
RofLas писал(а):
Че за файл и че за команды там прописаны? На F11 это же кнопка которая выводит команды записанные через Ctrl F2.


Ты просмотрел файл? Неважно какие команды там прописаны, можно вписать что угодно в конце, можеш сделать так чтобы реагировало на другую клавишу?. Помню давно получил этот файлик отдельно от та демо.

_________________
Satir in the past

Oh Frost,Froooost, not freezing me...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Hotkeys - хоткеи для Escalation
СообщениеДобавлено: 07 авг 2012 22:06 
Не в сети
Золотой железяка
Золотой железяка

Зарегистрирован: 27 ноя 2011 20:49
Сообщений: 117
RofLas
Структура KBDLLHOOKSTRUCT описана в WinUser.h, а этот файл в свою очередь подключается общим заголовочным файлом Windows.h. Так что она уже должна быть подключена и доступна в программе.

Да, хук посылает сообщения в системную очередь, но ловить их будет активное в данный момент приложение (запускаем прогу, запускаем Блокнот и пытаемся нажать назначенные кнопки).

Как вариант, можно попробовать внедриться в адресное пространство процесса totala.exe и там будет уже веселее, можно будет различные фичи самого движка использовать. Или же, внедрить свой код в ddraw.dll (исходники у меня есть, но только чёрт знает какая версия, да и xpoy забросил развитие), то там те же возможности по использованию всех фич движка.

Frost
Назначить на другую клавишу этот макрос можно только изменив ddraw.dll, поскольку только он обрабатывает все нестандартные для ТА комбинации, типа: Ctrl+F2, F11, \, x... В принципе, можно сделать хоть два макроса на F11 и Ctrl+F11. Но над этим надо подумать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Hotkeys - хоткеи для Escalation
СообщениеДобавлено: 07 авг 2012 22:08 
Не в сети
Аватара пользователя

Зарегистрирован: 24 мар 2011 10:27
Сообщений: 568
Еще на строения бы хотелось.

_________________
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Hotkeys - хоткеи для Escalation
СообщениеДобавлено: 07 авг 2012 22:25 
Не в сети
Аватара пользователя

Зарегистрирован: 12 ноя 2010 20:20
Сообщений: 193
Frost писал(а):
RofLas писал(а):
Че за файл и че за команды там прописаны? На F11 это же кнопка которая выводит команды записанные через Ctrl F2.


Ты просмотрел файл? Неважно какие команды там прописаны, можно вписать что угодно в конце, можеш сделать так чтобы реагировало на другую клавишу?. Помню давно получил этот файлик отдельно от та демо.


Посмотрел. Походу нет. Этот файл похоже содержит настройки которые вводятся через диалоговое окно ctrl F2. Когда ты активируешь этот файл в винде то просто вводишь эти настройки вне игры.

А саму кнопку F11 на которую текстовые команды вводятся, похоже нельзя поменять, она в коде ескалашиона зашита.

Ее можно токо задублировать съев какую нибудь кнопку клавы, и по нажатию на нее программно вызывать событие клавиши F11.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Hotkeys - хоткеи для Escalation
СообщениеДобавлено: 07 авг 2012 22:43 
Не в сети
Аватара пользователя

Зарегистрирован: 12 ноя 2010 20:20
Сообщений: 193
bl писал(а):
RofLas
Структура KBDLLHOOKSTRUCT описана в WinUser.h, а этот файл в свою очередь подключается общим заголовочным файлом Windows.h. Так что она уже должна быть подключена и доступна в программе.


Ок, буду знать.

bl писал(а):
Да, хук посылает сообщения в системную очередь, но ловить их будет активное в данный момент приложение (запускаем прогу, запускаем Блокнот и пытаемся нажать назначенные кнопки).

Как вариант, можно попробовать внедриться в адресное пространство процесса totala.exe и там будет уже веселее, можно будет различные фичи самого движка использовать. Или же, внедрить свой код в ddraw.dll (исходники у меня есть, но только чёрт знает какая версия, да и xpoy забросил развитие), то там те же возможности по использованию всех фич движка.


Да, по сути, надо конечно сделать чтобы хук посылал ввод только при уловили активизации окна тотала. Чтобы прогу туда суда не пере запускать.
А как получить нужные идентификаторы потока Totala.exe, и как мониторить событие активизации окна Тотала.

На счет динамического внедрения в код Тотала, это для меня темный лес. :krank:


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 66 ]  На страницу 1, 2, 3, 4, 5 ... 7  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете создать форум бесплатно PHPBB3 на Getbb.Ru, Также возможно сделать готовый форум PHPBB2 на Mybb2.ru
Русская поддержка phpBB