Страница: 1 | 2 | 3 |
Вопрос: Нажать кнопку в приложении DirectX
Добавлено: 10.07.07 21:25
Автор вопроса: TERMIT | Web-сайт:
Ответы
Всего ответов: 33
Номер ответа: 16
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #16
Добавлено: 12.07.07 04:42
Х.з. может быть... В играх я тоже не разу кнопки не нажимал, незнаю. Просто примеры приведенные TERMIT'ом и теоретически недолжны работать. Если ознакомится со статьей ссылку на которуя я привёл выше, можно научится хотябы правильно использовать SendKeys. Возможно в играх, как ты говоришь, нужен будет другой подход.
Номер ответа: 17
Автор ответа:
TERMIT
ICQ: 5297101
Вопросов: 16
Ответов: 93
Web-сайт:
Профиль | | #17
Добавлено: 12.07.07 15:03
Compile error:
Only user-defined types defined in public object modules can be coerced to or from a variant or passed to late-bound function
OK <-> Справка
Вот такую мне ошибищу выдает и помечает:
Call diDevKeyboard.SendDeviceData(cdod, rgdod, 0)
вот это выделяет: rgdod =( Шо делать?
Номер ответа: 18
Автор ответа:
TERMIT
ICQ: 5297101
Вопросов: 16
Ответов: 93
Web-сайт:
Профиль | | #18
Добавлено: 12.07.07 15:06
Короче, заработало, затупил я.... но чтота теперь другие ошибки выдает. не мог бы ты скинуть полный текст проги... херь какая то...
Номер ответа: 19
Автор ответа:
TERMIT
ICQ: 5297101
Вопросов: 16
Ответов: 93
Web-сайт:
Профиль | | #19
Добавлено: 12.07.07 15:15
Блин HACKER. Послушай та ссылка что ты дал, добавляет только одно:
ReturnValue = Shell("CALL.exe", 1) ' Запускает калькулятор.
AppActivate ReturnValue ' Активизирует калькулятор.
первая строка для запуска и получения значения к чему обращатся втрой строке. вторая строка делает активным это окно... Я е на столько тупой чтобы не понять что когда юзаеш SendKey нужно активным держать окно.... Я в таймер ставил это все дело которое я выше приводил примером... И в блокноте и в других прогах пахало, а в игру нет =(
Сдесь нада внатуре через директ мочить. Но чтота у меня там все не сростается тот примерчик
Номер ответа: 20
Автор ответа:
vito
Разработчик Offline Client
Вопросов: 23
Ответов: 879
Web-сайт:
Профиль | | #20
Добавлено: 12.07.07 17:44
Отправил полный пример.
Но он из SDK8. Так что если каких -то дллешек не хватит, я не виноват.
Номер ответа: 21
Автор ответа:
Fever
Вопросов: 60
Ответов: 808
Профиль | | #21
Добавлено: 13.07.07 00:03
SendMessage не поможет ни фига Он отсылает проге мессаг о нажатие клавиши, где-то то же самое делает Sendkeys(keybd_event) (конечно другое, оно пишет в общий буфер сообщений, а сендмессаг в частный оконный)
1. Тут надо поднимать драйвер виртуальной клавы, который перехватывает все мессаги с первой и перерабатывая их на себе, отдает. (это если ниче не поможет, хардкорный вариант)
2. Попробовать использовать элемент хука клавы от Desaware входящий в комплект SpyWorks для VB6.
Номер ответа: 22
Автор ответа:
Fever
Вопросов: 60
Ответов: 808
Профиль | | #22
Добавлено: 13.07.07 00:05
SpyWorks...
NT Service Toolkit...
StateCoder...
VersionStamper...
StorageTools and more...
With Desaware's Universal .NET and Universal COM you have complete control and an inside view of advanced programming techniques. $649 each - get them both for only $995.
Сцуки, раньше 15 баксов стоил Ващще обалдели. Щас я у себя посмотрю, сомневаюсь что в инете можно его найти.
Номер ответа: 23
Автор ответа:
TERMIT
ICQ: 5297101
Вопросов: 16
Ответов: 93
Web-сайт:
Профиль | | #23
Добавлено: 13.07.07 14:07
vito
Привет пример получил, но ведь там только:
Создание устройства и чтение буфера. это у меня есть а вот наоборот в буфер директа как записать. не могу!!!
Номер ответа: 24
Автор ответа:
vito
Разработчик Offline Client
Вопросов: 23
Ответов: 879
Web-сайт:
Профиль | | #24
Добавлено: 13.07.07 20:44
У тебя пример не работает по двум причинам.
1. Не подключены нужные либы (если посланный пример компилится все ок).
2. Не создан объект (девайс). Если с примером нормально, значит вставляй процедуру (из примера), только посмотри, чтобы имена девайса и etc совпадали.
Все должно быть ок.
Номер ответа: 25
Автор ответа:
vito
Разработчик Offline Client
Вопросов: 23
Ответов: 879
Web-сайт:
Профиль | | #25
Добавлено: 13.07.07 20:46
Во втором случае(2) я имею в виду процедуру записи, котору я привел ранее.
Номер ответа: 26
Автор ответа:
TERMIT
ICQ: 5297101
Вопросов: 16
Ответов: 93
Web-сайт:
Профиль | | #26
Добавлено: 14.07.07 14:06
Ну дык компилится все нормально, но имено при вызове строчки:
Call diDEV.SendDeviceData(cdod, rgdod, 0)
он выдает ошибку:
Run-time error: 445
Object doesn't support this action
Вот я выцгрузил имено тот проект который выдает ошибку:
http://xtec.ru/termit/4.rar
Номер ответа: 27
Автор ответа:
W[4Fh]LF
Вопросов: 0
Ответов: 187
Web-сайт:
Профиль | | #27
Добавлено: 15.07.07 09:11
keybd_event не посылает никаких сообщений окнам, это низкоуровневая функция, которая посылает "нажатия" в keyboard stream и на уровне системы нет разницы между обычным нажатием и этим. Функция прекрасно работает и в OpenGL и в DirectX приложениях. По-крайней мере, когда-то я писал тренеры для Soldier of Fortune и CS на основе этой функции и у меня всё работало. Единственная особенность - это сделать задержку между нажатием и отпусканием:
Call keybd_event(VK_RETURN, 0, 0, 0)
Call Sleep(50)
Call keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0)
Номер ответа: 28
Автор ответа:
TERMIT
ICQ: 5297101
Вопросов: 16
Ответов: 93
Web-сайт:
Профиль | | #28
Добавлено: 15.07.07 13:42
Привет, к сожалению, я попрробовал но не работает =(
игра Resident Evil 4
=((((( растоился я...
Номер ответа: 29
Автор ответа:
vito
Разработчик Offline Client
Вопросов: 23
Ответов: 879
Web-сайт:
Профиль | | #29
Добавлено: 16.07.07 01:34
Run-time error: 445
Object doesn't support this action
6 - ки у меня уже года три как не стоит.
Но попробуем разобраться.
В SDK для С++ есть более подробный пример. До вызова функции нужно получить идентификатор клавиши.
DWORD NumLockID;
HRESULT hr = pdev->GetObjectInfo(&didoi,
 IMAKEUSAGEDWORD(0x07,0x53), DIPH_BYUSAGE);
NumLockID = didoi.dwType;
Правда у меня не работает, пишет что аргументы неверные. Описания по этой функции очень скудные.
То же самое нужно сделать и для VB.
Можно посмотреть в SDK. Но на всякий случай приведу ее описание. Пример в SDK не прикладывается.
obj As Long, _
how As CONST_DIPHFLAGS) _
As DirectInputDeviceObjectInstance
Parts
object
Resolves to a DirectInputDevice8 object.
obj
Value that identifies the object whose information will be retrieved. The interpretation of this parameter depends on the value specified in the how parameter.
how
Value specifying how the obj parameter should be interpreted. This value can be one of the constants of the CONST_DIPHFLAGS enumeration.
//------------------------
CONST_DIPHFLAGS
Members of the CONST_DIPHFLAGS enumeration are used to specify how a device object is identified. They are used in the DirectInputDevice8.GetObjectInfo method as well as in the DIPROPLONG and DIPROPRANGE types.
Enum CONST_DIPHFLAGS
 IPH_BYID = 2
 IPH_BYOFFSET = 1
 IPH_BYUSAGE = 3
 IPH_DEVICE = 0
End Enum
Constants
DIPH_BYID
The device object is identified by the instance identifier obtained from the return value of the DirectInputDeviceObjectInstance.GetType method.
DIPH_BYOFFSET
The device object is identified by the offset into the current data format of the object whose information is being accessed.
DIPH_BYUSAGE
The device object is identified by the HID usage page and usage values in packed form.
DIPH_DEVICE
The property applies to the entire device, not to a particular object.
//-----------------------------
HID
HAL
Hardware abstraction layer. The HAL consists of hardware and device driver mechanisms that insulate applications from device-specific implementation details. If a capability requested by an application is not implemented by the current hardware, the capability is emulated by the software.
hardware blitter
A hardware component, built into the display adapter, that performs efficient blit operations.
HEL
Hardware emulation layer. The HEL provides software-based emulation of features that are not present in hardware.
HID
Human Interface Device. A USB class representing devices that enable a human to control a computer.
hit detection
See collision detection.
host
In Microsoft® DirectPlay®, a virtual player whose ID is DPID_SYSMSG. The host manages system messages and messages sent to all players in a session.
HREF
Horizontal refresh. In a video stream, the HREF is active to signal that the display is to begin a new scan line. See also VREF.
HRTF
Head-related transfer function. A mathematical representation of the effect of the listener's physiology on the pitch and timing of sounds arriving from different directions.
Если разберешься расскажи.
Номер ответа: 30
Автор ответа:
vito
Разработчик Offline Client
Вопросов: 23
Ответов: 879
Web-сайт:
Профиль | | #30
Добавлено: 16.07.07 03:36
Инфы почти нет.
И это действительно работа на уровне драйвера.
Лучше всего сходи на wasm.ru и спроси о SendDeviceData.
Ктати на Gamуdev точно такой - же вопрос обсуждался, но решения так и не нашли.
http://www.gamedev.ru/code/forum?id=15555
Решили церез драйвер обращения перехватывать. А какой драйвер на VB.
Задачка оказалась не простой.