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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.03.2012, 16:59
nikkilla nikkilla вне форума
Прохожий
 
Регистрация: 29.12.2011
Сообщения: 20
Репутация: 10
Лампочка полная эмуляция нажатия клавиши

Как эмулировать нажатие клавиши L на весь компьютер?

Эмуляция клавиши должна быть глобальной, так как её должна розпознавать другая программа, в то время как моя будет неактивной. И нужен такой способ чтобы не по Хенделу окна, так как программа почему то это блокирует... .

Буду очень благодарен
Ответить с цитированием
  #2  
Старый 08.03.2012, 17:17
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

keybd_event.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #3  
Старый 08.03.2012, 17:19
nikkilla nikkilla вне форума
Прохожий
 
Регистрация: 29.12.2011
Сообщения: 20
Репутация: 10
По умолчанию

keybd_event не работает как нужно. Я пробовал уже. Он работает но частично.

Последний раз редактировалось nikkilla, 08.03.2012 в 17:22.
Ответить с цитированием
  #4  
Старый 08.03.2012, 17:22
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Описанной задаче соответствует на 100%. Тогда подробнее опиши задачу. Что, куда и зачем нужно отправить и что должно произойти.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #5  
Старый 08.03.2012, 17:36
nikkilla nikkilla вне форума
Прохожий
 
Регистрация: 29.12.2011
Сообщения: 20
Репутация: 10
По умолчанию

прошу прощение за неполную инфу.

Я пишу программу для игры CS 1.6
Она должна:
Отловить ЛМБ (Я это уже сделал)
И пока ЛМБ зажата много раз просимулировать нажатие клавиши L в промежутке 500 мс.

У меня при зажатии вне игры всё работает, а вот в игре нажатие ЛМБ отлавнивает, а симулировать не хочет. Прошу помоч. Я нашел способ обойти все существующие античиты, но не все так легко.
Ответить с цитированием
  #6  
Старый 08.03.2012, 17:36
nikkilla nikkilla вне форума
Прохожий
 
Регистрация: 29.12.2011
Сообщения: 20
Репутация: 10
По умолчанию

Короче нужно сделать так чтобы игра думала что клавишу нажали на клавиатуре.
Ответить с цитированием
  #7  
Старый 10.03.2012, 13:06
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Странно. Keybd_event симулирует нажатие кнопки, передавая ее на цепочку обработчиков. На MSDN пишут, что драйвер клавиатуры использует именно эту функцию для отправки сообщения о нажатии системе. SendMessage(WM_KEYDOWN) к Handle'у передает сообщение сразу окну, поэтому тоже должно работать. Каким образом используется в коде keybd_event и sendmessage (возможно ошибка в параметрах)?
Других способов симуляции я не знаю. Можно попробовать SendInput, но врятли поможет.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #8  
Старый 10.03.2012, 13:53
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

а симулировать нажатие кнопок мыши работает?
Ответить с цитированием
  #9  
Старый 10.03.2012, 15:06
m1sclick m1sclick вне форума
Начинающий
 
Регистрация: 04.07.2011
Адрес: Украина
Сообщения: 186
Версия Delphi: 2010
Репутация: 2094
По умолчанию

Посади за комп китайца пускай набирает, я думаю для тебя это будет самый верный вариант.
Ответить с цитированием
  #10  
Старый 10.03.2012, 15:31
nikkilla nikkilla вне форума
Прохожий
 
Регистрация: 29.12.2011
Сообщения: 20
Репутация: 10
По умолчанию

keybd_event(Ord('L'), 0, 0, 0);
keybd_event(Ord('L'), 0, KEYEVENTF_KEYUP, 0);

Возможно ошибка в параметрах. Брал из FAQ этого сайта.
Ответить с цитированием
  #11  
Старый 10.03.2012, 15:37
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Хм. Вроде все нормально. Попробуй между ними сделать Sleep(1000), чтобы имитировать задержку в секунду перед отпусканием. Возможно, CS не обращает внимания на сообщения и просто сама N раз в секунду проверяет состояние интересующих её клавиш...
Ну и на всякий случай скажу, фокус ввода должен быть на окне CS, т.к. если она не игнорирует сообщения, то это важно.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 10.03.2012 в 15:43.
Ответить с цитированием
  #12  
Старый 10.03.2012, 17:43
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

смотри вариант: в игре меняешь бинд со своей клавиши на кнопку мыши, и в дельфи эмулируешь нажатие этой кнопки мыши
Ответить с цитированием
  #13  
Старый 10.03.2012, 22:19
nikkilla nikkilla вне форума
Прохожий
 
Регистрация: 29.12.2011
Сообщения: 20
Репутация: 10
По умолчанию

Если бы были на мышке свободные кнопки давно бы забиндил.

ЛМБ - +attack
ПКМ - Аим
СКМ - +attack2

L - +attack

Смысл в том, что при нажатии лмб происходит не один а несколько выстрелов, что повышает шанс попадания.
Ответить с цитированием
  #14  
Старый 11.03.2012, 09:00
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

можно прописать, чтобы при нажатии левой – менялся бинд правой кнопки, а при отпускании – менялся обратно

//что повышает шанс попадания
насколько повышает? что-то не верится
Ответить с цитированием
  #15  
Старый 11.03.2012, 16:51
nikkilla nikkilla вне форума
Прохожий
 
Регистрация: 29.12.2011
Сообщения: 20
Репутация: 10
По умолчанию

если стрелять одиночними, то повышается, и на много..... .

Короче нужно сделать всё програмно
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter