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
.
- Utwórz bibliotekę DLL eksportującą funkcje zakładające i zdejmujące hak typy WH_KEYBORD
- Zaimplementuj procedurę haka wychwytującą wciśnięcie klawisza F4 (VK_F4) i jednoczesne wciśnięcie lewego klawisza Alt (29 bit argumentu
lParam
) - 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);
- 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.
- 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. - Wyeksportuj z biblioteki funkcję zakładającą hak typu
WH_JOURNALPLAYBACK
. Procedura haka (JournalPlaybackProc) odtwarza akcje zapamiętane przez procedurę haka zapisującego. Dla akcjiHC_GETNEXT
należy podstawić zawartość odtwarzanej akcji do struktury EVENTMSG wskazywanej przez akgumrntlParam
a procedura powinna zwrócić odstęp czasu po jakim akcja ma być odtworzona. - 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);