Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.02;
Скачать: 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 вся ветка

Текущий архив: 2005.10.02;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.051 c
9-1117391938
Cerberus
2005-05-29 22:38
2005.10.02
Собрать команду


1-1126078099
Alpine
2005-09-07 11:28
2005.10.02
Как лучше округлять денежные значения ?


1-1126019229
Relaxxx
2005-09-06 19:07
2005.10.02
2 вопроса:разделитель дробной части и popupMenu не закрывать по


14-1126541899
Prohodil Mimo
2005-09-12 20:18
2005.10.02
Как расшифровывается аббревиатура ЗАО?


14-1126451934
wnew
2005-09-11 19:18
2005.10.02
Правовые гарантии по использованию открытого кода.