MessageBox из Winlogon'а

Тема в разделе "WASM.WIN32", создана пользователем Twister, 23 авг 2007.

  1. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Недавно, в ответ на один из топиков на ВБСтритс, я написал програмку, перехватывающую в Винлогоне CTRL+ALT+DELETE. При перехвате, перед передачей управления настоящей оконной функции я вызываю MessageBox, дабы показать, что кто-то давит три клавиши. Вся проблема в том, что у меня на работе, где стоит WinXP SP2 home, все отлично работает. А дома, на WinXP SP1 professional, MessageBox не выводится. Потрейсил Винлогон в том месте - оказывается, что вызов MessageBoxA происходит, но в ее недрах что-то не так срабатывает и до MessageBoxIndirect дело не доходит. Может кто подскажет, в чем может быть дело? Вот код внедряемой в Винлогон либы:
    Код (Text):
    1. library cad_hook_dll;
    2.  
    3. uses
    4.   Windows, Messages;
    5.  
    6. var
    7.   lpOldSASProc: pointer;
    8.   hwSAS: DWORD;
    9.  
    10. {$R *.res}
    11.  
    12. function NewSASProc(hSAS, uMsg, wParam, lParam: DWORD): DWORD; stdcall;
    13. begin
    14. if uMsg = WM_HOTKEY then
    15.   //Если нажата комбинация клавиш ALT+CTRL+DELETE
    16.   if lParam = DWORD(MAKELONG(MOD_CONTROL or MOD_ALT, VK_DELETE)) then
    17.     MessageBox(GetActiveWindow, 'Кто-то давит ALT+CTRL+DELETE', 'SAS-хук',
    18.                MB_ICONINFORMATION + MB_DEFAULT_DESKTOP_ONLY)
    19.   //Если нажата комбинация клавиш CTRL+SHIFT+ESCAPE
    20.   else if lParam = DWORD(MAKELONG(MOD_CONTROL or MOD_SHIFT, VK_ESCAPE)) then
    21.     MessageBox(GetActiveWindow, 'Кто-то давит CTRL+SHIFT+ESCAPE', 'SAS-хук',
    22.                MB_ICONINFORMATION + MB_DEFAULT_DESKTOP_ONLY);
    23. result := CallWindowProc(lpOldSASProc, hSAS, uMsg, wParam, lParam);
    24. end;
    25.  
    26. begin
    27. hwSAS := FindWindow('SAS Window class', 'SAS window');
    28. if hwSAS <> 0 then
    29.   lpOldSASProc := pointer(SetWindowLong(hwSAS, GWL_WNDPROC, DWORD(@NewSASProc)));
    30. MessageBox(GetActiveWindow, 'Сообщение из Winlogon''а', 'Мы здесь!',
    31.            MB_ICONINFORMATION + MB_DEFAULT_DESKTOP_ONLY);
    32. end.
     
  2. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Совсем забыл добавить - первый MessageBox, который выскакивает при загрузке либы, отрабатывает нормально, то бишь выводится...
     
  3. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    Twister
    внимательно смотри на http://irazin.ru/samples/sashook.htm

    хотя... у тебя почти то же самое :dntknw:
     
  4. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    При написании я опирался именно на этот код.
    Проблема не в хуке - все прекрасно перехватывается.
    Проблема в MessabeBox'e, который срабатывает когда хочет... (
     
  5. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    getactivewindow настораживает меня, может поставить 0 просто для пробы?
     
  6. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Мы с тобой думаем в одном направлении - при отладке Винлогона я первым делом проверил, что возвращает GetActiveWindow. Вроде все в норме.
    На этой страничке лежит файл cad_hook.rar. Можешь потестить у себя?
     
  7. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    У меня работает. WXPSP2Eng Prof Version 2002
     
  8. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    sp1 у меян нет.
     
  9. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Скорее всего, это баг SP1. Нужно дождаться того, у кого он есть и еще потестить.
     
  10. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Если сильно надо, выложи бинарник.
    Есть SP1, нету делфи.
     
  11. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    http://twister.orgfree.com/sources/cad_hook.rar
     
  12. Zveros

    Zveros New Member

    Публикаций:
    0
    Регистрация:
    8 май 2009
    Сообщения:
    3
    Помогите пожалуйста дописать код подовления alt+tab , ctr+esc ,alt+f4 или игнорировать нажатие клавиш SHIFT, CTR, ESC, ALT, и клавиши виндовс. Горит дипломка, все работает осталось только cad отключить.
     
  13. planet

    planet New Member

    Публикаций:
    0
    Регистрация:
    10 апр 2007
    Сообщения:
    108
    дипломка)) чёто больше похоже на sms-locker) Срочно вернитесь в школу пока не сгорели..
     
  14. Zveros

    Zveros New Member

    Публикаций:
    0
    Регистрация:
    8 май 2009
    Сообщения:
    3
    да нет, у меня действительно дипломка. У меня тут тема http://www.delphisources.ru/forum/showthread.php?p=31700#post31700 Сейчас отключает CTRL+ALT+DEL и CTRL+ALT+ESC, а ALT+TAB и клавишу windows не получается.
     
  15. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
  16. Zveros

    Zveros New Member

    Публикаций:
    0
    Регистрация:
    8 май 2009
    Сообщения:
    3
    q_q: Спасибо, все заработало.