Ślad: • gdi • instrukcje • haki

Haki

Writing /home/grochu/public_html/wiki/data/cache/6/65d178aff88e0d7fefdf0d9970a1ac07.i failed
Unable to save cache file. Hint: disk full; file permissions; safe_mode setting.
Writing /home/grochu/public_html/wiki/data/cache/6/65d178aff88e0d7fefdf0d9970a1ac07.metadata failed
Writing /home/grochu/public_html/wiki/data/cache/0/0aecd8a88c64b13ce195ddd4cc45b8f9.i failed
Writing /home/grochu/public_html/wiki/data/cache/0/0aecd8a88c64b13ce195ddd4cc45b8f9.metadata failed

Spis treści

Writing /home/grochu/public_html/wiki/data/cache/6/65d178aff88e0d7fefdf0d9970a1ac07.i failed
Unable to save cache file. Hint: disk full; file permissions; safe_mode setting.
Writing /home/grochu/public_html/wiki/data/cache/7/70131137adc687fbe222fe72cb96a213.xhtml failed

Haki

Zadanie 1

Utwórz program zakładający hak przechwytujący globalnie próbę zamknięcia dowolnego okna za pomocą skrótu klawiszowego Alt+F4.

  1. Utwórz bibliotekę DLL eksportującą funkcje zakładające i zdejmujące hak typy WH_KEYBORD
  2. Zaimplementuj procedurę haka wychwytującą wciśnięcie klawisza F4 (VK_F4) i jednoczesne wciśnięcie lewego klawisza Alt (29 bit argumentu lParam)
  3. Utwórz program, który ładuje bibliotekę DLL i zakłada hak globalny.

Przydatne funkcje:

  • SetWindowsHookEx - instaluje hak
    HHOOK SetWindowsHookEx(int idHook, HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId);
  • UnhookWindowsHookEx - usuwa hak
    BOOLUnhookWindowsHookEx(HHOOK hhk); 
  • KeyboardProc callback function
    LRESULT KeyboardProc(int code, WPARAM wParam, LPARAM lParam); 
  • CallNextHookEx - przesyła informacje do kolejnego haka w kolejce
    LRESULT CallNextHookEx(HHOOK  hhk, int    nCode, WPARAM wParam, LPARAM lParam);

Zadanie 2

Utwórz program zakładający dwa haki pozwalające rejestrować i odtwarzać wykonane w systemie akcje.

  1. Utwórz bibliotekę DLL eksportującą funkcje zakładające i zdejmujące hak typy WH_JOURNALRECORD. Procedura haka (JournalRecordProc) wraz z akcją HC_ACTION dostarcza strukturę EVENTMSG, którą procedura powinna zachować np. w kolekcji vector z STL.
  2. Wyeksportuj z biblioteki funkcję zakładającą hak typu WH_JOURNALPLAYBACK. Procedura haka (JournalPlaybackProc) odtwarza akcje zapamiętane przez procedurę haka zapisującego. Dla akcji HC_GETNEXT należy podstawić zawartość odtwarzanej akcji do struktury EVENTMSG wskazywanej przez akgumrnt lParam a procedura powinna zwrócić odstęp czasu po jakim akcja ma być odtworzona.
  3. Utwórz program, który ładuje bibliotekę DLL i uruchamia nagrywanie po wciśnięciu klawisza F11 zaś uruchamia odtwarzanie po wciśnięciu klawisza F12.

Przydatne funkcje:

  • GetTickCount ilość milisekund od startu systemu
    DWORD WINAPI GetTickCount(void);