Edytuj stronę Odnośniki Fold/unfold all ODT export Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić. ====== 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 \\ <code C>HHOOK SetWindowsHookEx(int idHook, HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId);</code> * [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms644993%28v=vs.85%29.aspx|UnhookWindowsHookEx]] - usuwa hak <code C>BOOLUnhookWindowsHookEx(HHOOK hhk); </code> * [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms644984%28v=vs.85%29.aspx|KeyboardProc callback function]] \\ <code C>LRESULT KeyboardProc(int code, WPARAM wParam, LPARAM lParam); </code> * [[https://msdn.microsoft.com/en-us/library/windows/desktop/ms644974%28v=vs.85%29.aspx|CallNextHookEx]] - przesyła informacje do kolejnego haka w kolejce \\ <code C>LRESULT CallNextHookEx(HHOOK hhk, int nCode, WPARAM wParam, LPARAM lParam);</code> ===== 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 <code C>DWORD WINAPI GetTickCount(void);</code>