Я работаю над приложением, которое автоматизирует Excel через com. Проблема, с которой я сталкиваюсь, заключается в том, что иногда, когда пользователь нажимает на некоторые клавиши клавиатуры , Excel перехватывает фокус и переходит в состояние редактирования ячейки, из-за чего мое приложение терпит крах. Что может быть лучшим способом предотвратить появление сообщений клавиатуры в Excel. Я пробовал безуспешно крючок CBT и крюк GetMessage. Есть ли другие способы?Предотвращение доступа к сообщениям клавиатуры приложения
ответ
Объект приложения Excel 2010 имеет свойство Interactive
. Установите значение false, и Excel заблокирует все входные данные клавиатуры и мыши, за исключением любых отображаемых вами диалоговых окон.
Application.Interactive = False
Я не уверен, когда Interactive
был добавлен, но я не думаю, что он существовал в Excel 2000.
Простейший способ, возможно, состоит в использовании BlockInput(), который блокирует ввод мыши и клавиатуры на весь рабочий стол: это полезно, если вы хотите заблокировать пользователя только на короткий период времени.
С другой стороны, если вы просто хотите, чтобы заблокировать вход от достижения конкретного ехе, используйте SetWindowsHookEx(WH_KEYBOARD_LL, ...) - в MSDN, вы можете вернуть -1 из HOOKPROC, чтобы вызвать вход игнорируется:
Если nCode больше чем или равным нулю, [...] Если обработчик обработал сообщение, он может вернуть ненулевое значение, чтобы система не передавала сообщение остальной части цепочки крючков или процедуре целевого окна.
Одна из приятных особенностей крючков WH_KEYBOARD_LL заключается в том, что им не требуется отдельная DLL, вы можете делать все в своем собственном EXE. Но используйте его только против threadID приложения excel; если у вас есть HWND приложения, используйте GetWindowThreadID(), чтобы получить это.
- 1. Предотвращение доступа к базе данных вне приложения
- 2. Предотвращение доступа пользователей к подпапкам приложения?
- 3. Предотвращение доступа приложения к базе данных
- 4. Поставщик контента Gmail для доступа к сообщениям
- 5. Gmail Api для доступа к делегированным сообщениям
- 6. Предотвращение прямого доступа к файлам
- 7. Предотвращение отклонения IME (мягкой клавиатуры) от приложения
- 8. Как добавить кнопку «share» к сообщениям приложения?
- 9. Предотвращение доступа к вишневым червям
- 10. Предотвращение доступа к ресурсам банки
- 11. GAE Предотвращение доступа к файлам
- 12. Предотвращение доступа пользователя к интернету
- 13. Предотвращение доступа к памяти процесса
- 14. Предотвращение прямого доступа к файлам
- 15. Предотвращение доступа FxCop к GotDotNet
- 16. Предотвращение доступа пользователей к документу
- 17. Предотвращение процесса доступа к Интернету
- 18. Предотвращение закрытия клавиатуры
- 19. Предотвращение отклонения мягкой клавиатуры
- 20. Предотвращение доступа root к моим файлам приложений
- 21. Предотвращение доступа к определенному WebApps в Tomcat6
- 22. Предотвращение междоменного доступа к службам с WCF
- 23. Предотвращение покрытия клавиатуры TextBox
- 24. Предотвращение выбора клавиатуры comboBox
- 25. Предотвращение прямого доступа к исходной базе данных доступа Ms
- 26. Предотвращение доступа пользователей к базе данных приложений
- 27. Предотвращение доступа к «частному» атрибуту в Python
- 28. Предотвращение прямого доступа к базе данных
- 29. Доступ к старым сообщениям reddit
- 30. Предотвращение доступа к WEB-INF от JSP
Это отличная идея! Никогда не задумывался о том, чтобы искать это. Он добавлен в Excel 2007 – SparcU
@SparcU, вы также можете использовать 'Application.Cursor = xlWait', чтобы изменить указатель мыши на песочные часы. Просто не забудьте вернуть его в 'xlDefault', когда это будет сделано. – mischab1