Member 14073125 Ответов: 0

Как отличить левый и правый двигатели в эффектах принудительной обратной связи джойстика


//использование Microsoft.DirectX
//использование Microsoft.Совместимая с DirectX.И DirectInput
DeviceList dList = менеджер.GetDevices(DeviceClass.GameControl, EnumDevicesFlags.AttachedOnly);
DeviceInstance dInstance;
по каждому элементу (DeviceInstance deviceInstance в dList)
{

dInstance = deviceInstance;
перерыв;
}
//Инициализирующее устройство "вибрационный джойстик 12btns / 2anlg "
EffectObject эо = нуль;
Эффект eff = новый эффект();
Device dev = новое устройство(dInstance.InstanceGuid);
dev.SetCooperativeLevel(это, CooperativeLevelFlags.Эксклюзив | Кооператив Levelflags.Фон);
int[] axis = новый int[0];
по каждому элементу (devoi DeviceObjectInstance в dev.Объекты)
{
если((Девой.Флаги & (int)ObjectInstanceFlags.Сила) != 0)
{
axis = new int[ось.Длина + 1];
axis[ось.Длина - 1] = devoi.Смещение;
}
}

разработка.Приобретать();


eff.SetDirection(new int[axis.Длина]);
//int следующий шаг при попытке "new int[axis.Длина]" причины
//Ошибка"значение не попадает в ожидаемый диапазон"
//возможно, это ошибка в коде внутреннего конструктора DirectX.
//Directx.Dll Версия :5.04.00.2904 - DirectInput.Dll версия 9.15.779.0000
eff.SetAxes(new int[1]);

//остальные свойства.
ЕФФ.TriggerButton = (int)кнопка.Нотриггер;
эфф.продолжительность = 25000;
ЕФФ.Коэффициент усиления = 10000;
ЕФФ.Флаги = EffectFlags.Сферические | Эффектфлаги.ObjectOffsets;
эфф.Длительность = тип int.Максвеллову;
eff.SamplePeriod = 0;


ЕФФ.TriggerRepeatInterval = (int)DI.Infinite;
ЕФФ.UsesEnvelope = истина;
eff.EffectType = EffectType.ConstantForce;
eff.StartDelay = 0;
эфф.Константа.Величина = 10000;



//Guid для эффекта постоянной силы из реестра :HKLM\CurrentControlSet\Control\MediaProperties\PrivateProperties\Joystick\OEM\VID_0079&PID_0006\...
eo = new EffectObject(новый Guid("{13541C20-8E33-11D0-9AD0-00A0C9A06E35}"),eff,dev);

//стартовый эффект (1 итерация)
//оба мотора.
eo.Start(1);

//теперь мне нужно отправить силовой эффект на указанный двигатель(различать левый и правый);
// как тот, что в GameControllers.Панель управления.вибрационные испытания
//exemple : [RightForce|leftForce|BothForce]
//изменение параметров [SetAxes|SetDirection] ниже не сработало;
//ни редактирование значений реестра для OEM
// Эффекты принудительной обратной связи тоже не сработали;

Что я уже пробовал:

висячие параметры [SetAxes|SetDirection]
редактирование значений реестра для эффектов принудительной обратной связи OEM
Вообще ничего не получалось

Gerry Schmitz

Как вы можете иметь "для каждого" с безусловным "перерывом" в середине?

Используйте .First... (), если это то, что вы хотите.

Member 14073125

это двойной геймпад . мне нужно получить только первое устройство
мне это нужно в каком-то проекте dxdiag

0 Ответов