Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.21;
Скачать: CL | DM;

Вниз

Использование джойстика. Проблема с joySetCapture.   Найти похожие ветки 

 
DVM ©   (2006-12-22 10:05) [0]

Столкнулся с проблемой. Делаю вызов  joySetCapture(). Все ок - сообщения от джойстика начинают приходить указанному в параметрах окну. Делаю  joyReleaseCapture. Тоже получается - сообщения приходить перестают. Но вот если опять вызвать  joySetCapture() - то ничего более не происходит. До перезапуска программы от джойстика сообщения более не поступают. Почему? Никто не сталкивался?


 
Сергей М. ©   (2006-12-22 10:08) [1]

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.


 
DVM ©   (2006-12-22 10:15) [2]


> Сергей М. ©   (22.12.06 10:08) [1]

Вы за кого меня держите? MSDN я читать умею и результат выполнения функций всегда проверяю. Так вот: joySetCapture() возвращает JOYERR_NOERROR при повторном вызове из того же самого приложения (естесственно до этого вызывалось joyReleaseCapture). Похоже на баг системы. WinXP SP2


 
oxffff ©   (2006-12-22 10:20) [3]

А разве так еще делают?

А как же 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:29) [4]


> А разве так еще делают?

Ну а почему бы нет?


 
Сергей М. ©   (2006-12-22 10:37) [5]


> естесственно до этого вызывалось joyReleaseCapture


Она тоже вернула успех ?


 
DVM ©   (2006-12-22 10:45) [6]


> Она тоже вернула успех ?

Да


 
DVM ©   (2006-12-22 10:50) [7]

Есть правда другой вариант - по таймеру опрашивать joyGetPos(), но это лишняя нагрузка на систему (если частота опроса высокая).


> oxffff ©   (22.12.06 10:20) [3]

DirectX как то не очень хочется привлекать - это все таки не игра. Просто разрабатываю компонент один, к управлению которым очень подходит джойстик (промышленный) - так вот при получении фокуса компонент должен захватывать джойстик - при потере фокуса освобождать джойстик. Вот повторный захват не получается.


 
Сергей М. ©   (2006-12-22 10:52) [8]


> DVM


Приводи фрагменты своего кода, посмотрим что там к чему ...


 
DVM ©   (2006-12-22 10:57) [9]


> Сергей М. ©   (22.12.06 10:52) [8]

Проблема явно не в моем коде. Точно так же ведут себя все компоненты, которые удалось найти (на www.torry.net) - все они используют joySetCapture/joyReleaseCapture для захвата/освобождения джойстика - и такая проблема наблюдается со всеми компонентами.

Упрощенный вариант кода могу набрасать - но это вряд ли поможет делу.

Может кто решал проблему подобную?


 
Сергей М. ©   (2006-12-22 11:18) [10]


> DVM ©   (22.12.06 10:57) [9]


Ну если так, то похоже на системный баг.

А не пробовал запускать всю эту петрушку в режиме совместимости с той или иной ОС, отличной от ХР ?


 
DVM ©   (2006-12-22 11:22) [11]


> А не пробовал запускать всю эту петрушку в режиме совместимости
> с той или иной ОС, отличной от ХР ?

Не, не помогает. Поискал в гугле - тоже один человек спрашивал насчет подобного - так похоже и не ответил никто ему.


 
oxffff ©   (2006-12-22 11:27) [12]


> DVM ©   (22.12.06 11:22) [11]
>
> > А не пробовал запускать всю эту петрушку в режиме совместимости
>
> > с той или иной ОС, отличной от ХР ?
>
> Не, не помогает. Поискал в гугле - тоже один человек спрашивал
> насчет подобного - так похоже и не ответил никто ему.


Значит остальные как-то решили проблему, если она вообще была.


 
tramp_viy ©   (2006-12-27 09:28) [13]

У меня тоже самое под ХP, 2003Serv
правда под 2000 все нормально,
Ума не приложу где его взять :(


 
DevilDevil ©   (2006-12-27 16:29) [14]

могу посоветовать опробовать DirectInput. если и там баги будут, то баг в системе ;)


 
Reindeer Moss Eater ©   (2006-12-28 11:49) [15]

Так по любому DInput.

А если кнопок скажем больше чем 4?


 
XProger ©   (2006-12-29 13:34) [16]

Reindeer Moss Eater, реализоывал джойстик на WinAPI до 32 кнопок + pov + 6 осей. Единственный минус - Feedback нельзя :)
Делал не мессагами, а постоянным опросом состояния...


 
DVM ©   (2007-01-09 15:48) [17]


> А если кнопок скажем больше чем 4?

Какая разница сколько кнопок?

> Делал не мессагами, а постоянным опросом состояния...

Ну вот мне тоже пришлось так делать из-за бага этого.



Страницы: 1 вся ветка

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

Наверх




Память: 0.51 MB
Время: 0.026 c
1-1186384261
ancot
2007-08-06 11:11
2007.10.21
Быстрый импорт из Excel


15-1190355579
zdm77
2007-09-21 10:19
2007.10.21
ICQ игнор


2-1190791085
smartleds
2007-09-26 11:18
2007.10.21
Добрый день, подскажите плз при помощи нажатия на кнопку создать


3-1181547201
Krants
2007-06-11 11:33
2007.10.21
Разрешить изменения текста в TDBEdit


8-1166580641
>>DEATH<<
2006-12-20 05:10
2007.10.21
палитра в bmp