Недавно, в ответ на один из топиков на ВБСтритс, я написал програмку, перехватывающую в Винлогоне CTRL+ALT+DELETE. При перехвате, перед передачей управления настоящей оконной функции я вызываю MessageBox, дабы показать, что кто-то давит три клавиши. Вся проблема в том, что у меня на работе, где стоит WinXP SP2 home, все отлично работает. А дома, на WinXP SP1 professional, MessageBox не выводится. Потрейсил Винлогон в том месте - оказывается, что вызов MessageBoxA происходит, но в ее недрах что-то не так срабатывает и до MessageBoxIndirect дело не доходит. Может кто подскажет, в чем может быть дело? Вот код внедряемой в Винлогон либы: Код (Text): library cad_hook_dll; uses Windows, Messages; var lpOldSASProc: pointer; hwSAS: DWORD; {$R *.res} function NewSASProc(hSAS, uMsg, wParam, lParam: DWORD): DWORD; stdcall; begin if uMsg = WM_HOTKEY then //Если нажата комбинация клавиш ALT+CTRL+DELETE if lParam = DWORD(MAKELONG(MOD_CONTROL or MOD_ALT, VK_DELETE)) then MessageBox(GetActiveWindow, 'Кто-то давит ALT+CTRL+DELETE', 'SAS-хук', MB_ICONINFORMATION + MB_DEFAULT_DESKTOP_ONLY) //Если нажата комбинация клавиш CTRL+SHIFT+ESCAPE else if lParam = DWORD(MAKELONG(MOD_CONTROL or MOD_SHIFT, VK_ESCAPE)) then MessageBox(GetActiveWindow, 'Кто-то давит CTRL+SHIFT+ESCAPE', 'SAS-хук', MB_ICONINFORMATION + MB_DEFAULT_DESKTOP_ONLY); result := CallWindowProc(lpOldSASProc, hSAS, uMsg, wParam, lParam); end; begin hwSAS := FindWindow('SAS Window class', 'SAS window'); if hwSAS <> 0 then lpOldSASProc := pointer(SetWindowLong(hwSAS, GWL_WNDPROC, DWORD(@NewSASProc))); MessageBox(GetActiveWindow, 'Сообщение из Winlogon''а', 'Мы здесь!', MB_ICONINFORMATION + MB_DEFAULT_DESKTOP_ONLY); end.
Совсем забыл добавить - первый MessageBox, который выскакивает при загрузке либы, отрабатывает нормально, то бишь выводится...
При написании я опирался именно на этот код. Проблема не в хуке - все прекрасно перехватывается. Проблема в MessabeBox'e, который срабатывает когда хочет... (
Мы с тобой думаем в одном направлении - при отладке Винлогона я первым делом проверил, что возвращает GetActiveWindow. Вроде все в норме. На этой страничке лежит файл cad_hook.rar. Можешь потестить у себя?
Помогите пожалуйста дописать код подовления alt+tab , ctr+esc ,alt+f4 или игнорировать нажатие клавиш SHIFT, CTR, ESC, ALT, и клавиши виндовс. Горит дипломка, все работает осталось только cad отключить.
да нет, у меня действительно дипломка. У меня тут тема http://www.delphisources.ru/forum/showthread.php?p=31700#post31700 Сейчас отключает CTRL+ALT+DEL и CTRL+ALT+ESC, а ALT+TAB и клавишу windows не получается.