2015-06-15 6 views
3

Я помогаю реализовать эксперимент с использованием PsychoPy на планшете Windows 8. Кажется, что невозможно получить прямой доступ к событиям касания через интерфейсы PsychoPy или pyglet или PyGame.Запись времени начала касания экрана в PsychoPy на Windows

Большинство других источников, которые я нашел, ссылаются на использование событий перемещения мыши вместо событий касания. Это отлично работает для записи позиции, но для времени записи это не работает для нас. Мы хотели бы собрать время начала прикосновения, в то время как событие мыши приходит в конце прикосновения.

Кто-нибудь знает, как это сделать, либо в PsychoPy, либо путем импорта другой библиотеки в эксперимент?

Обновление: Запись событий мыши ioHub, похоже, что события нажатия и отпуска мыши отправляются в конце касания. Это имеет смысл, так как это тот момент, когда ОС уверена, что прикосновение не является салфеткой. (Кроме того, он будет решать, будет ли касание левым или правым кликом в зависимости от продолжительности касания).

+0

Что вы используете для записи событий мыши ... и можете ли вы изменить что-то эквивалентное '', а не' 'возможно ?. – Jkdc

+1

Вы посмотрели на '' psychopy.iohub'', который явно различает события для прессы и выпуска? Есть демо для сенсорных экранов elo (Coder -> Demos -> ioHub -> elotouchscreen). Если это не сработает, возможно, он регистрируется как событие мыши, и в этом случае вы также разделяете события нажатия и выпуска (см. Coder -> demos -> ioHub -> mouse). Демонстрации довольно сложны, поэтому дайте мне знать, если они работают, и я могу опубликовать более четкое решение вашего вопроса. –

+0

@ JonasLindeløv Спасибо за это. В настоящее время код использует события pyglets mouse через PsychoPy. Прикосновение к экрану похоже на мышь * move *, а не на * щелчок *, поэтому мышь вниз/вверх, скорее всего, не сработает - я должен исследовать события iohub и посмотреть, какие из них создаются. Я просмотрел код сенсорного экрана ELO, и это кажется очень отличным от нашей ситуации. Это отдельное аппаратное устройство, которое должно быть явно запрошено через внешний порт. У нас есть встроенный экран, который (через ОС) должен уже производить сообщения WM_GESTURE/WM_TOUCH - вопрос в том, как их получить! – alisdt

ответ

1

Мне это удалось, используя крючок в WndProc, это не очень, но он работает. Решение, для потомков:

https://github.com/alisdt/pywmtouchhook

Краткое резюме:

Я использовал комбинацию ctypes и pywin32 (к сожалению, ни один мог сделать работу), чтобы зарегистрировать цель HWND получить сенсорные сообщения, и замените его WndProc, передавая все сообщения без касания оригинальному WndProc.