![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Использование джойстика. Проблема с joySetCapture. [D7, WinXP]
DVM © (2006-12-22 10:05:00)Столкнулся с проблемой. Делаю вызов joySetCapture(). Все ок - сообщения от джойстика начинают приходить указанному в параметрах окну. Делаю joyReleaseCapture. Тоже получается - сообщения приходить перестают. Но вот если опять вызвать joySetCapture() - то ничего более не происходит. До перезапуска программы от джойстика сообщения более не поступают. Почему? Никто не сталкивался?
DVM (2007-01-09 15:48:00) [1]
> А если кнопок скажем больше чем 4?
Какая разница сколько кнопок?
> Делал не мессагами, а постоянным опросом состояния...
Ну вот мне тоже пришлось так делать из-за бага этого.
XProger (2006-12-29 13:34:00) [2]Reindeer Moss Eater, реализоывал джойстик на WinAPI до 32 кнопок + pov + 6 осей. Единственный минус - Feedback нельзя :)
Делал не мессагами, а постоянным опросом состояния...
Reindeer Moss Eater (2006-12-28 11:49:00) [3]Так по любому DInput.
А если кнопок скажем больше чем 4?
DevilDevil (2006-12-27 16:29:00) [4]могу посоветовать опробовать DirectInput. если и там баги будут, то баг в системе ;)
tramp_viy (2006-12-27 09:28:00) [5]У меня тоже самое под ХP, 2003Serv
правда под 2000 все нормально,
Ума не приложу где его взять :(
oxffff (2006-12-22 11:27:00) [6]
> DVM © (22.12.06 11:22) [11]
>
> > А не пробовал запускать всю эту петрушку в режиме совместимости
>
> > с той или иной ОС, отличной от ХР ?
>
> Не, не помогает. Поискал в гугле - тоже один человек спрашивал
> насчет подобного - так похоже и не ответил никто ему.
Значит остальные как-то решили проблему, если она вообще была.
DVM (2006-12-22 11:22:00) [7]
> А не пробовал запускать всю эту петрушку в режиме совместимости
> с той или иной ОС, отличной от ХР ?
Не, не помогает. Поискал в гугле - тоже один человек спрашивал насчет подобного - так похоже и не ответил никто ему.
Сергей М. (2006-12-22 11:18:00) [8]
> DVM © (22.12.06 10:57) [9]
Ну если так, то похоже на системный баг.
А не пробовал запускать всю эту петрушку в режиме совместимости с той или иной ОС, отличной от ХР ?
DVM (2006-12-22 10:57:00) [9]
> Сергей М. © (22.12.06 10:52) [8]
Проблема явно не в моем коде. Точно так же ведут себя все компоненты, которые удалось найти (на www.torry.net) - все они используют joySetCapture/joyReleaseCapture для захвата/освобождения джойстика - и такая проблема наблюдается со всеми компонентами.
Упрощенный вариант кода могу набрасать - но это вряд ли поможет делу.
Может кто решал проблему подобную?
Сергей М. (2006-12-22 10:52:00) [10]
> DVM
Приводи фрагменты своего кода, посмотрим что там к чему ...
DVM (2006-12-22 10:50:00) [11]Есть правда другой вариант - по таймеру опрашивать joyGetPos(), но это лишняя нагрузка на систему (если частота опроса высокая).
> oxffff © (22.12.06 10:20) [3]
DirectX как то не очень хочется привлекать - это все таки не игра. Просто разрабатываю компонент один, к управлению которым очень подходит джойстик (промышленный) - так вот при получении фокуса компонент должен захватывать джойстик - при потере фокуса освобождать джойстик. Вот повторный захват не получается.
DVM (2006-12-22 10:45:00) [12]
> Она тоже вернула успех ?
Да
Сергей М. (2006-12-22 10:37:00) [13]
> естесственно до этого вызывалось joyReleaseCapture
Она тоже вернула успех ?
DVM (2006-12-22 10:29:00) [14]
> А разве так еще делают?
Ну а почему бы нет?
oxffff (2006-12-22 10:20:00) [15]А разве так еще делают?
А как же DIRECTINPUT?
DirectInput8Create(MainInstance,DIRECTINPUT_VERSION,IID_IDirectInput8,DirectInpu t8,nil);
DirectInput8.CreateDevice(GUID_Joystick,DirectJoyDevice,nil);
DirectJoyDevice.SetCooperativeLevel(Handle,DISCL_NONEXCLUSIVE or DISCL_BACKGROUND);
DirectJoyDevice.SetDataFormat(c_dfDIJoystick);
DirectJoyDevice.Acquire;
DVM (2006-12-22 10:15:00) [16]
> Сергей М. © (22.12.06 10:08) [1]
Вы за кого меня держите? MSDN я читать умею и результат выполнения функций всегда проверяю. Так вот: joySetCapture() возвращает JOYERR_NOERROR при повторном вызове из того же самого приложения (естесственно до этого вызывалось joyReleaseCapture). Похоже на баг системы. WinXP SP2
Сергей М. (2006-12-22 10:08:00) [17]Return Values
Returns JOYERR_NOERROR if successful or one of the following error values.
Value Description
MMSYSERR_NODRIVER The joystick driver is not present.
MMSYSERR_INVALPARAM Windows 95/98/Me: Invalid joystick ID or hwnd is NULL.
JOYERR_NOCANDO Cannot capture joystick input because a required service (such as a Windows timer) is unavailable.
JOYERR_UNPLUGGED The specified joystick is not connected to the system.
JOYERR_PARMS Windows NT/2000/XP: Invalid joystick ID or hwnd is NULL.