2013-11-28 2 views
2

У меня есть приложение C# .NET 2.0, работающее на клиентском киоске (Windows XP), которое иногда создает окно для ввода пользователем. Другое программное обеспечение для киосков, похоже, каким-то образом вмешивается в это, потому что во время его запуска наше окно не будет получать события мыши или клавиатуры, несмотря на то, что оно является верхним окном. Когда другое программное обеспечение не работает, все работает так, как ожидалось. Кто-нибудь имеет представление о том, что может происходить здесь?Приложение форм, не принимающее события мыши или клавиатуры

Благодаря

+2

Я думаю, что «другое программное обеспечение» перехватывает и обрабатывает входные события. У вас есть доступ к поддержке или документации «другого программного обеспечения», так как есть, вероятно, белый список, который вы можете добавить в приложение, чтобы остановить это. –

+0

@ sa_ddam213 совсем нет - похоже, это может быть какая-то гонка вооружений, которая я вхожу в игру. –

ответ

1

Посмотрите здесь

http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C

Использование глобальной клавиатуры крюк должен делать только штрафом, и некоторые источники также включены. Кроме того, некоторые пользователь, кажется, решить подобную проблему с помощью ManagedSpyLib:

https://stackoverflow.com/a/8829286/1284902

+0

Это отлично подойдет для ввода клавиатуры и мыши, поэтому спасибо за ваш ответ. –

+0

Глобальный крючок или ManagedSpyLib? – Tarec

+0

Глобальный крюк –

1

После некоторого копания, вполне возможно, что программа других окон формы использует клавиатуру крючок низкого уровня, похожий на один найденный здесь http://blogs.msdn.com/b/toub/archive/2006/05/03/589423.aspx. Перейдя по ссылке, в этой статье я наткнулся на резюме этого фрагмента кода

Для конкретного примера этого, рассмотрит (ошибочный) код на рисунке 4. Использование низкого уровня клавиатуры окно крюка, то код перехватывает все сообщения WM_KEYDOWN, отправленные в любое окно, и выводит соответствующий ключ.

Источник: http://msdn.microsoft.com/en-us/magazine/cc163606.aspx

+0

Спасибо за указатель - я добавлю тестовый крючок и посмотрю, получит ли он события на более низком уровне. –

2

Если сомневаетесь - использовать Spy ++ при условии, с Visual Studio, чтобы увидеть, какие сообщения получает ваше окно от системы.

Если другое приложение блокирует все входные данные, это не соответствует API Win32. Вот почему тайм-аут перехвата низкого уровня был представлен в Vista и более новой ОС Win. Это означает, что процесс будет выведен из цепи крюка низкого уровня, если он слишком долго удерживается на крюке до вызова CallNextHookEx() и больше не получает сообщений об ошибках нижнего уровня.

В Windows XP таких ограничений нет. Процесс может занимать столько времени, сколько требуется для обработки сообщения о подключении. Другая программа либо глючит, либо зла. Если важно, чтобы ваше приложение имело вход, то просто закройте другое программным путем или обратитесь к автору его и объясните ситуацию.

+0

да хорошая точка. Spy ++ - отличный инструмент для отладки выше. –