Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2009, 21:56   #1
hotcooler17
Пользователь
 
Регистрация: 06.01.2009
Сообщений: 34
Печаль Перехват неперехвачеваемого

Здравствуйте. Есть проблема с глобальным перехватом. Если вкратце: есть игра, а в ней баг. Последний требует повторения одних и тех же действий.
Но делать их надо быстро и по этому после 2-3 повтора следует облом. Решение нашел такое: при нажатии СКМ прога "активируется" - ставит хук - и далее при нажатии ЛКМ начинает тыкать по ряду кнопок мыши и клавиатуры. Проблема собственно в том что в этом ряду присутствует и ЛКМ, и прога сама себя зацикливает. Переместить кнопки нельзя, так как действия ориентированны на игру и должны быть быстрыми.
З.Ы. Хук не передает нажатие далее.
З.З.Ы. Очень извиняюсь, если не нашел поиском подобной темы. Прошу не слать на justgoogleit и в другие поисковики.

Заранее спасибо.
hotcooler17 вне форума Ответить с цитированием
Старый 02.04.2009, 19:21   #2
hotcooler17
Пользователь
 
Регистрация: 06.01.2009
Сообщений: 34
По умолчанию

Неужели ни кто не знает?
hotcooler17 вне форума Ответить с цитированием
Старый 03.04.2009, 09:48   #3
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

Про зацикливание:
Сделай глобальный флаг в проге
Код:
var
  IsClicksRuned : Boolean = False;

procedure DoClicks();
begin
  if IsClicksRuned then
    exit;

  IsClicksRuned := True;
  try
    // Тут твоя комбинация нажатий
  finally
    IsClicksRuned := false
  end;

end;
Цитата:
Хук не передает нажатие далее.
А как ты его передаешь?
s.Creator вне форума Ответить с цитированием
Старый 03.04.2009, 18:31   #4
hotcooler17
Пользователь
 
Регистрация: 06.01.2009
Сообщений: 34
По умолчанию

Идея следующая: прога работает в 3 режимах - 1)Ловит клавишу и выполняет действие 1; 2) тоже, но действие 2; 3) Выключено(Ловит только СКМ)
Соответственно СКМ хук пропускает, а ПКМ нет.
Код:
function hook(c0de, wParam, lParam : integer): Lresult; stdcall;
var HofMain:HWND;
begin
  if c0de >= 0 then
    begin
case wParam of
        WM_MBUTTONDOWN:
        begin
          HofMain := FindWindow('TForm1', nil);
          SendMessage(HofMain, WM_CHN_MODE, 0, 0);
          result := CallNextHookEx(H, c0de, wParam, lParam);
        end;
        WM_RBUTTONDOWN:
        begin
          HofMain := FindWindow('TForm1', nil);
          SendMessage(HofMain, WM_LEFT_CLICK, 0, 0);
          result := 1;
        end;
      end;
end;
Хук ловится так и передает при нажатии кнопки в прогу сообщение с командой. А прога выполняет соответствующие действия.
На счет комбинаций: Я использую поток.
Нужно лишь передать проге инфу о том, что нажата такая-то кнопка.
Я уже это реализовал, но процедура(та, которой идет сообщение) почему-то запускается 2 раза. Режим определяет уже сама прога.

И все еще актуальна проблема из 1-го поста. Как заставить хук-функцию пропустить некоторые клики ПКМ?

Последний раз редактировалось hotcooler17; 03.04.2009 в 18:39.
hotcooler17 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перехват клавиатуры Ferro Общие вопросы Delphi 3 25.03.2010 21:02
API перехват Irat Помощь студентам 13 11.02.2008 12:04
Перехват сообщений rubi Win Api 3 06.09.2007 00:25
хттп перехват infected Работа с сетью в Delphi 1 09.07.2007 07:58
перехват трафика Roman Работа с сетью в Delphi 6 27.06.2007 08:51