Текущий архив: 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