У меня возникла такая проблемка: нужно сделать чтобы если запущена моя программа, то нельзя было переключаться на другие задачи, нажимать там на меню пуск и т. д. Короче чтобы все сообщения с клавиатуры и мыши которые в итоге идут не к окну моей программы просто блокировались. И самое главное прога должна в винде начиная с версии 98. Так вот два вопроса: 1. Есть какие-нить встроенные в винду средства чтобы просто это сделать? 2. Я вижу вариант типа в explorer'е найти оконную процедуру или что-нить такую и поковырять её. Криво?
Вы не учли, что CTRL-ALT-DEL просто так не перехватишь. К тому же, кто такой прогой пользоваться будет? Ведь нет свободы действий. А так есть вариант писать драйвер (для NT отдельно, для 98 отдельно) он будет перехватывать все и вся. Но сразу скажу , что так просто тяп-ляп не получится.
TermoSINteZ Такие программы устанавливают на компьютеры в общественных местах, в библиотеке например, или я помнится как-то для бензозаправки что-то похожее делал. Drakon CTRL-ALT-DEL я запрещал заменой gina.dll на свою собственную. Все остальное можно перехватить хуками.
Такс.. Чтобы заменить gina в работающей системе надо знать кто использует эту библиотеку? Вроде только winlogon... Или я не прав. И как сделать замену? Я так понял надо перехватить только вызов функции WlxLoggedOnSas в процессе winlogin: библиотека msgina.dll? Насчёт хуков: где можно почитать? =)
Почитай статьи Rem`а про хуки: http://www.wasm.ru/article.php?article=apihook_1 http://www.wasm.ru/article.php?article=apihook_2 http://www.wasm.ru/article.php?article=apihook_3
Единственная клавиша, которую не получится нормально "перехватить" через WM_KEYDOWN - F10. Все остальные сами посылаются сначала обработчику главного окна и если их не погасить, далее превращаются в системные команды. Ctrl+Alt+Del можно временно запретить через реестр (проверял только на XP). В msn можно найти в какой ветке и что менять для отключения Ctrl+Alt+Del.
т.к. все переферийные устройства имеют контроллеры, то лучшим вариантом является блокирование именно на этом уровне, а для этого однозначно необходимо писать драйвер. Но тебя такое конечно не устроит, так что только хуки.
На 9х можно заблокировать alt+tab, alt+esc, ctrl+esc, ctrl+alt+del и тп вызовом Код (Text): call SystemParametersInfoA, 61h, 0, offset some_buf, 0 второй параметр = 0 => заблокировать, 1 => разбл. На nt -- SetWindowsHookExA, но с её помощью 3 пальца нельзя хукнуть.
Запрет Ctrl+Alt+Del, Alt+Tab etc... можно тут посмотреть: http://www.codeproject.com/win32/AntonioWinLock.asp http://www.codeproject.com/system/preventclose.asp
А нельзя сделать прозрачное окошко программы на весь экран? Только чтобы поверх всех окон выло, при потере фокуса опять переключаться на себя. Тогда никакие сообщения другим окнам не дойдут, т.к. они будут приходить окошку твоей проги.
Что касается перхвата контр альт делита. Мне это нужно для моей програмы. Там типа отключение клавы и мыши. Для отключения использвоал функцию BlockInput из user32.dll. Вот с CAD возникли проблемы. Я знаю три способа перехвата CAD(речь идёт тока об 2000/2003/XP): 1. Замена msgina.dll. Это можно сделать и заменой файла и добавлением ключика в реестре(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\GinaDll) на адрес нашей длл. Написать длл не сложно так как по сути это дллл-обёртка. В ней все функции (их насколько я помню 10) вызываются без изменений у настоящей джины, кроме WlxLoggedOnSas - она вызвается при CAD. Недостаток этого способа это то что установка Джина с помощью ключа в реестре тербует перезагрузки и то что в вин 2000 и 2003 при нажатии КАД проиходит переключение декстопов. При перехвате происходит мелькание экрана. Поэтому этот способ мне не подходит 2. Винлогон регистрирует КАД при помощи функции RegisterHotkey. При нажатии КАД окно винлогона, на которое зарегитрироват хотки получается сообщенеи WM_HOTKEY. Так вот способ такой: Длл-инджектион в винлогон, изменение обработчика окна на свой. Окно обрабатываеющее КАД можно найти FindWindow('SAS Window class', 'SAS window' ), изменить обработчик с помощью SetWindowLong. Недостаток у этого способа это то что некоторым умным антивирусам не нравится длл-инджектион. Поэтому этот способ мне тоже не подходит. 3. Написание драйвера-фильтра клавиатуры.