====== 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:** * [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms644990%28v=vs.85%29.aspx|SetWindowsHookEx]] - instaluje hak \\ HHOOK SetWindowsHookEx(int idHook, HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId); * [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms644993%28v=vs.85%29.aspx|UnhookWindowsHookEx]] - usuwa hak BOOLUnhookWindowsHookEx(HHOOK hhk); * [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms644984%28v=vs.85%29.aspx|KeyboardProc callback function]] \\ LRESULT KeyboardProc(int code, WPARAM wParam, LPARAM lParam); * [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms644974%28v=vs.85%29.aspx|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 ([[https://msdn.microsoft.com/en-us/library/windows/desktop/ms644983%28v=vs.85%29.aspx|JournalRecordProc]]) wraz z akcją ''HC_ACTION'' dostarcza strukturę [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms644966%28v=vs.85%29.aspx|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 ([[https://msdn.microsoft.com/en-us/library/windows/desktop/ms644982%28v=vs.85%29.aspx|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. - 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:** * [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms724408%28v=vs.85%29.aspx|GetTickCount]] ilość milisekund od startu systemu DWORD WINAPI GetTickCount(void);