Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.03.2020, 12:49
Dreammaster Dreammaster вне форума
Прохожий
 
Регистрация: 11.06.2014
Сообщения: 36
Версия Delphi: RAD Studio XE3
Репутация: 10
По умолчанию Действие при нажатии боковых клавиш мыши

Здравствуйте. Как реализовать действие (например нажатие кнопки Пробел) при клике на БОКОВЫЕ кнопки мыши? Это те, что по умолчанию вперед и назад в браузере делают. ПКМ, СКМ, ЛКП - знаю, а вот на боковые ничего не нашел. :-(
Помогите, будьте любезны.
Ответить с цитированием
  #2  
Старый 09.03.2020, 18:56
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Смотри тут: https://stackoverflow.com/questions/...lick-in-delphi
Там простой пример через ApplicationEvent (только там нет такого понятия как Click, его в винде нет. Есть нажатие и отпускание (down and up).
Ответить с цитированием
  #3  
Старый 09.03.2020, 19:21
Gareth Gareth вне форума
Активный
 
Регистрация: 21.03.2013
Адрес: Приднестровье
Сообщения: 202
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Dreammaster
Здравствуйте. Как реализовать действие (например нажатие кнопки Пробел) при клике на БОКОВЫЕ кнопки мыши? Это те, что по умолчанию вперед и назад в браузере делают. ПКМ, СКМ, ЛКП - знаю, а вот на боковые ничего не нашел. :-(
Помогите, будьте любезны.
Это икс батоны)

Ну, можно простенький вариант на таймере...

кидаешь таймер на форму, выставляешь интервал какой нужен, к примеру 50.

Пишешь глобальную переменную Flag. она нужна для того, что бы пробел не нажимался бесконечно, пока зажата боковая кнопка.
Flag: boolean;

В таймере код:


Код:
  if GetAsyncKeyState(VK_XBUTTON1) <> 0 then // если боковая кнопка зажата
  begin
    if Flag = False then 
    begin
      Flag := True; // ставим флаг сразу в тру, что бы пробел не нажимался много раз.
      // тут пишем код, эмулируем нажатие и отжатие пробела.
      keybd_event(VK_SPACE, 0, 0, 0);
      keybd_event(VK_SPACE, 0, KEYEVENTF_KEYUP, 0);
    end;
  END else  // если боковая кнопка не зажата
  begin
    Flag := False;
  end;
VK_XBUTTON1 и VK_XBUTTON2 это те самые боковые кнопки.
Если ты хочешь отправлять нажатие пробела в окно, ну скажем в игру, например cs16... То эмуляция нажатия кнопок будет другая.

глоб. переменная
Код:
CSwin: hwnd;

в том же таймере или в formcreate
Код:
CsWin := FindWindow(nil, 'Counter-Strike');
и за место
Код:
      keybd_event(VK_SPACE, 0, 0, 0);
      keybd_event(VK_SPACE, 0, KEYEVENTF_KEYUP, 0);
Вот это
Код:
       SendMessage(CsWin,WM_KEYDOWN ,VK_SPACE, MakeLong(0, MapVirtualKey(VK_SPACE, 0))); // зажать space
       sleep(10) ;
        SendMessage(CsWin,WM_KEYUP ,VK_SPACE, MakeLong(0, MapVirtualKey(VK_SPACE, 0)));  // отпустить space

Последний раз редактировалось Gareth, 09.03.2020 в 19:28.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:27.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter