Вниз
Скачать: CL | DM;

Симуляция нажатия клавиш в играх   Найти похожие ветки 

 
Ylia___   (2005-09-06 15:42) [0]

Подскажите пожалуйста!
Для того чтобы в играх узнать о состоянии клавиш,
используется функция GetDeviceState вот например
отрывок из DelphiX DirectX.pas :

  IDirectInputDeviceA = interface(IUnknown)
   ["{5944E680-C92E-11CF-BFC7-444553540000}"]
   // IDirectInputDeviceA methods
   function GetCapabilities(var lpDIDevCaps: TDIDevCaps): HResult; stdcall;
   function EnumObjects(lpCallback: TDIEnumDeviceObjectsCallbackA;
       pvRef: Pointer; dwFlags: DWORD): HResult; stdcall;
   function GetProperty(rguidProp: PGUID; var pdiph: TDIPropHeader): HResult; stdcall;
   function SetProperty(rguidProp: PGUID; const pdiph: TDIPropHeader): HResult; stdcall;
   function Acquire: HResult; stdcall;
   function Unacquire: HResult; stdcall;
   function GetDeviceState(cbData: DWORD; var lpvData): HResult; stdcall;
   function GetDeviceData(cbObjectData: DWORD; var rgdod: TDIDeviceObjectData;
       var pdwInOut: DWORD; dwFlags: DWORD): HResult; stdcall;
   function SetDataFormat(const lpdf: TDIDataFormat): HResult; stdcall;
   function SetEventNotification(hEvent: THandle): HResult; stdcall;
   function SetCooperativeLevel(hwnd: HWND; dwFlags: DWORD): HResult; stdcall;
   function GetObjectInfo(var pdidoi: TDIDeviceObjectInstanceA; dwObj: DWORD;
       dwHow: DWORD): HResult; stdcall;
   function GetDeviceInfo(var pdidi: TDIDeviceInstanceA): HResult; stdcall;
   function RunControlPanel(hwndOwner: HWND; dwFlags: DWORD): HResult; stdcall;
   function Initialize(hinst: THandle; dwVersion: DWORD; const rguid: TGUID): HResult; stdcall;
 end;

здесь описана функция:
function GetDeviceState(cbData: DWORD; var lpvData): HResult; stdcall;
С помощью которой компонент DXInput узнает состояние клавиш на клавиатуре.
А есть ли аналогичная функция с помощью которой можно УСТАНОВИТЬ(симулировать)
нажатия клавиш ???
Пробовал с SetKeyboardState но что-то не получается.


 
Eraser ©   (2005-09-06 15:45) [1]

Ylia___   (06.09.05 15:42)

Есть! keybd_event.
Для эмуляции мыши - mouse_event.


 
alpet ©   (2005-09-06 15:48) [2]

Eraser ©   (06.09.05 15:45) [1]

Либо SendInput, что не важно. К примеру это реализовано в взломщике  игр (http://www.alpet.hotmail.ru/wgcsrc.zip), для быстрого ввода чит-кодов.


 
Ylia___   (2005-09-06 16:40) [3]

Что-то не могу скачать
http://www.alpet.hotmail.ru/wgcsrc.zip


 
Ylia___   (2005-09-06 16:53) [4]

Хотелось бы небольшой пример.
пробую:
keybd_event(VK_UP, 0, 0, 0);
не получается.
DxInput не определяет нажатие клавиши.


 
alpet ©   (2005-09-06 17:02) [5]

У меня прекрасно открывается.

procedure SimKeyUp(Key : byte);
begin
keybd_event (Key, 0, KEYEVENTF_KEYUP, 0);
end;

procedure SimKeyDn (Key : byte);
begin
keybd_event (Key, 0,  0, 0);
sleep (sdelay);
end;

procedure SimKeystroke (Key : byte; scan : DWORD);
begin
keybd_event(Key, scan, 0, 0);
sleep (sdelay);
keybd_event(Key, scan, KEYEVENTF_KEYUP, 0);
end;


Для полноценного нажатия, надо также симулировать и отпускание. Кроме того для некоторых клавиш надо задавать флажок KEYEVENTF_EXTENDEDKEY.
Впрочем я до конца неуверен, что DirectInput будет поддаваться на симуляцию.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.024 c
6-1118184509
Макс Т.
2005-06-08 02:48
2005.10.02
Получение странички БЕЗ каких-либо VCL компонентов


3-1124543918
Dysan
2005-08-20 17:18
2005.10.02
не мог ли бы подсказать почему запрос не работает?


2-1124614549
чайник5
2005-08-21 12:55
2005.10.02
colorbox


1-1126018381
ArtemESC
2005-09-06 18:53
2005.10.02
Блокировка формы


14-1126504704
TUser
2005-09-12 09:58
2005.10.02
Накормить народ не трудно, Если топоры в руках. :))




   Наверх