Перехват Alt+Tab
Мне интересно как можно в Win 2k и XP перехватывать нажатие сочетания клавиш Alt+Tab. (ТОЛЬКО ДЛЯ NT GetSystemInfo или что-то там на подобие, если я не ошибаюсь, не подходит!!!). Повесить на него что-нибудь свое...
PS: Я не собираюсь писать злостные программы, мне просто интересно, ведь в Quake III это сделали, значит можно.
PPS: Могу поделиться перехватом Ctrl+Alt+Delete в Win 2k и XP (тоже мне очень безопасные системы!!!)
PPS: Могу поделиться перехватом Ctrl+Alt+Delete в Win 2k и XP (тоже мне очень безопасные системы!!!)
хех... могу поделиться подменой вектора прерывания обработчика клавиатуры... :D :P ;) :}
сорри за оффтопик.
хех... могу поделиться подменой вектора прерывания обработчика клавиатуры... :D :P ;) :}
сорри за оффтопик.
кинь в приват мейл, у меня где-то исходники валялись...
хех... могу поделиться подменой вектора прерывания обработчика клавиатуры... :D :P ;) :}
сорри за оффтопик.
Очень интересно!... И как? Заранее благодарен.
кинь в приват мейл, у меня где-то исходники валялись...
OK
винда, тем более 2000/ХР должна забить на любые попытки перехвата вектора прерываний...
а вот порты ввода-вывода доступны всегда :)
а твой перехват A-C-D будет работать под юзверем, не имеющем никаких прав?
и, господа, если есть исходники, выкладывайте их здесь - подумайте о подростающих поколениях :) - не будут же найдя пост через полгода слать мыло с невнятной просьбой выслать что-то.
конечно, если у вас исходник в архиве весит больше 100кб, тогда ничего не получиться... но тогда вас можно объявлять богами и преклоняться в ночь с четверга на пятницу :)
Метод основан на просачивании в winlogon и извращении SAS. Оформлен в виде DLL. Что касается прав то это зависит от проги которая сие в winlogon доставит.
ЗЫ: Кому принадлежит окно, которое возникает при нажатии Alt+Tab
В принципе пример не мой, я его нашел как-то в бескрайних просторах Интернета (хотя я его немного переделал, теперь сие перехватывает Alt+Ctrl+Delete и Ctrl+Shift+Esc и ничего не делает). Автора не знаю.
Метод основан на просачивании в winlogon и извращении SAS. Оформлен в виде DLL. Что касается прав то это зависит от проги которая сие в winlogon доставит.
Пример проверерен на WinXP. Не работает (FindWindow возвращает NULL)
Пример проверерен на WinXP. Не работает (FindWindow возвращает NULL)
Что честно говоря очень странно!!! У меня работает!!! Какой WinXP??? У меня Professional sp1, хотя помниться и без sp1 работал. Сколько прав у пользователя??? Чем и куда внедряешь???
Вот на всякий случай откомпилированный вариант.
Что честно говоря очень странно!!! У меня работает!!! Какой WinXP??? У меня Professional sp1, хотя помниться и без sp1 работал. Сколько прав у пользователя??? Чем и куда внедряешь???
Вот на всякий случай откомпилированный вариант.
Windows XP SP2ru.
Вот простой пример (в данном случае на билдере, ну да это пофигу):
void __fastcall TForm1::Button1Click(TObject *Sender) {
HWND g_hSASwnd= NULL;
g_hSASwnd = FindWindow( TEXT("SAS Window class"), TEXT("SAS window") ); // после выполнения FindWindow в g_hSASwnd находится NULL, что означает, что такое окно не найдено. Упссс
return;
}
не думаю, что перехват вектра прерываний поможет.
винда, тем более 2000/ХР должна забить на любые попытки перехвата вектора прерываний...
а вот порты ввода-вывода доступны всегда :)
а твой перехват A-C-D будет работать под юзверем, не имеющем никаких прав?
ну с портами все ясно... а на счет "забить" ты думаешь? я, если честно не пробовал в 2000...
в 9x этот фокус всегда срабатывал и добраться в ring-0 нефиг делать... а на счет 2000...
де-то у меня был исходник чьего-то виря для NT такого способа действия - вроде работает... ну я еще сам попробую...
Windows XP SP2ru.
Вот простой пример (в данном случае на билдере, ну да это пофигу):
void __fastcall TForm1::Button1Click(TObject *Sender) {
HWND g_hSASwnd= NULL;
g_hSASwnd = FindWindow( TEXT("SAS Window class"), TEXT("SAS window") ); // после выполнения FindWindow в g_hSASwnd находится NULL, что означает, что такое окно не найдено. Упссс
return;
}
Если я правильно понял, то на форме есть кнопка, нажатие на которую вызывает вышеприведенный код?... Этот пример может простой, но неправильный!!! Дело в том, что окно, которое получает сообщение о нажатии кнопок Ctrl+Alt+Delete принадлежит процессу Winlogon (окно SAS window). ВыньДОС пытается скрыть это окно, на всякий случай. Необходимо сделать так, что бы этот исполняемый код прежде оказался внутри процесса Winlogon. По этому все это и сделано в DLL (хотя можно сделать по другому). Эту самую DLL и нужно запихивать в Winlogon с помощью любой предназначенной для этого утилиты. Вот мой пример такой утилиты (в main.cpp вызывается две функции для внедрения и извлечения, лишнее вычеркнуть, ProcID должен содержать ID Winlogon’а (!!!!!!!!!!!), Path – путь к библиотеке (SAS.dll))
ВыньДОС пытается скрыть это окно, на всякий случай. Необходимо сделать так, что бы этот исполняемый код прежде оказался внутри процесса Winlogon. По этому все это и сделано в DLL (хотя можно сделать по другому). Эту самую DLL и нужно запихивать в Winlogon с помощью любой предназначенной для этого утилиты.
Это происходит "на лету" или чтобы C-A-D перестал работать, нужно перегружать компьютер?
Это происходит "на лету" или чтобы C-A-D перестал работать, нужно перегружать компьютер?
А что есть проблемы??????
Конечно “на лету". Я скинул исходник (выше!) с помощью которого можно впихнуть SAS.dll в процесс Winlogon. Вызвав функцию InjectLibW можно впихнуть все это дело (главное правильно параметры передать). Первый параметр ID Winlogon’а узнать его можно или программно (в исходнике нет такой возможности!) или вручную. Запустив диспетчер задач, Меню->Вид->Выбрать столбцы..., поставить галочку «Идентиф. Процесса (PID)», OK, найти в списке процессов процесс winlogon.exe, посмотреть его PID, предать функции в качества первого параметра (внимание! Если вы выключите кимпутер или решите его перезагрузите по собственному желания, PID Winlogon’а может поменяться!!!). Второй параметр это полный путь к файлу SAS.dll (Смотри еще выше, только не очень высоко :) ).
EjectLibW извлекает все это. Параметры те же!!!
Если будут проблемы или вопросы постараюсь терпеливо их решить или ответить.
А что есть проблемы??????
Конечно “на лету". Я скинул исходник (выше!) с помощью которого можно впихнуть SAS.dll в процесс Winlogon. Вызвав функцию InjectLibW можно впихнуть все это дело (главное правильно параметры передать). Первый параметр ID Winlogon’а узнать его можно или программно (в исходнике нет такой возможности!) или вручную. Запустив диспетчер задач, Меню->Вид->Выбрать столбцы..., поставить галочку «Идентиф. Процесса (PID)», OK, найти в списке процессов процесс winlogon.exe, посмотреть его PID, предать функции в качества первого параметра (внимание! Если вы выключите кимпутер или решите его перезагрузите по собственному желания, PID Winlogon’а может поменяться!!!). Второй параметр это полный путь к файлу SAS.dll (Смотри еще выше, только не очень высоко :) ).
EjectLibW извлекает все это. Параметры те же!!!
Если будут проблемы или вопросы постараюсь терпеливо их решить или ответить.
Ругается на блок try. __leave не понимает, и еще с приведением типов кое-какие траблы. Ну ладно, основную мысль я понял - добываешь задачу Winlogon и вешаешь свой обработчик событий, если кратко. А с Alt-Tab такая же фишка не прокатывает? Его другой процесс обрабатывает, получается?
Ругается на блок try. __leave не понимает, и еще с приведением типов кое-какие траблы. Ну ладно, основную мысль я понял - добываешь задачу Winlogon и вешаешь свой обработчик событий, если кратко. А с Alt-Tab такая же фишка не прокатывает? Его другой процесс обрабатывает, получается?
В том-то вся и проблема! Я не знаю кто обрабатывает Alt+Tab!!! Пытался определить кому принадлежит окошко, которое выскакивает при переключение задач, но пока без успеха. В Интернете как-то натыкался на то, что это окошко принадлежит ядру (???!!!), но больше я ничего не знаю!!!
PS: Убейте все проверки!!! Или посмотрите, как их надо переделать под билдер, я работаю в Visual C++ .NET
В том-то вся и проблема! Я не знаю кто обрабатывает Alt+Tab!!! Пытался определить кому принадлежит окошко, которое выскакивает при переключение задач, но пока без успеха. В Интернете как-то натыкался на то, что это окошко принадлежит ядру (???!!!), но больше я ничего не знаю!!!
PS: Убейте все проверки!!! Или посмотрите, как их надо переделать под билдер, я работаю в Visual C++ .NET
У меня другой вопрос: а откуда взялись файлы с названиями Nt*.cpp и Nt*.h???
Скорее всего, окошко Alt-Tab принадлежит диспетчеру задач, по логике. IMHO
У меня другой вопрос: а откуда взялись файлы с названиями Nt*.cpp и Nt*.h???
Скорее всего, окошко Alt-Tab принадлежит диспетчеру задач, по логике. IMHO
Это веселые файлы, в которых определены функции, которые необходимы для получения кучи полезной информации о процесса (в частности о загруженных модулях).
Если речь идет о «Диспетчере задач Windows», то я могу с уверенностью сказать, что они не как не связанный!
Это веселые файлы, в которых определены функции, которые необходимы для получения кучи полезной информации о процесса (в частности о загруженных модулях).
А откуда они взялись? Это написал какой-то чел, или это часть MSDN?
Если речь идет о «Диспетчере задач Windows», то я могу с уверенностью сказать, что они не как не связанный!
Кто с кем? Окно Alt-Tab с диспетчером задач? А если вместо Explorer загрузить другую оболочку, будет ли выполняться Alt-Tab???
А откуда они взялись? Это написал какой-то чел, или это часть MSDN?
Кто с кем? Окно Alt-Tab с диспетчером задач? А если вместо Explorer загрузить другую оболочку, будет ли выполняться Alt-Tab???
Источник файлов не помню! Давно они у меня...
С Explorer не связанно это факт! (хотя лично я не проверял!) Все это сидит где-то глубже...