Zrozumienie Hooka jest dość proste, jest do skok do za alokowanej nowej procedury gdzieś w pamięci a potem powrót do starej.
Dokładnie nie tłumaczyłem każdej linijki w HookEngine ale mogę napisać jak mniej więcej to działa.
funkcja MemoryProtectionOverride przypisuje na podane adres prawa do zapisuj i odczytu.
Tak jak ja to robię i raczej jest tak samo w Hookengine to przypisanie do adresu na którym stara procedura jest wykonywana skoku, do nowej procedury, albo do nowej utworzonej pamięci z nową procedurą. Następnie skok do starej procedury, albo jej wywołanie i zpowrotem skok do następnego adresu w kodzie. I tak się wszystko zapętla.
Rozwiązanie może i dobre tylko trzeba by najpierw znaleźć adres który odpowiada za wywołanie menu, potem przypisać do tego adresu nasza procedurę która zwraca 1 albo 0 do jakiegoś adresu, który potem możemy odczytać i sprawdzić czy menu jest otwarte heh.
Życzę powodzenia