Другое С/С++ Вопрос - Ответ

Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
C++:
#include <Windows.h>
#include <detours/detours.h>
#include <iostream>

static HMODULE(WINAPI* TrueLoadLibrary)(LPCWSTR lpLibFileName) = LoadLibraryW;

HMODULE WINAPI DetouredLoadLibrary(LPCWSTR lpLibFileName)
{
    HMODULE res = TrueLoadLibrary(lpLibFileName);
    MessageBoxW(NULL, lpLibFileName, L"Detoured!", MB_OK | MB_ICONEXCLAMATION);
    return res;
}

void SetGlobalHook()
{
    // Получение адреса оригинальной функции LoadLibraryW из kernel32.dll
    TrueLoadLibrary = reinterpret_cast<HMODULE(WINAPI*)(LPCWSTR)>(GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "LoadLibraryW"));

    // Установка хука
    DetourTransactionBegin();
    DetourUpdateThread(GetCurrentThread());
    DetourAttach(&(PVOID&)TrueLoadLibrary, DetouredLoadLibrary);
    DetourTransactionCommit();
}

// Функция для удаления глобального хука
void RemoveGlobalHook()
{
    // Удаление хука
    DetourTransactionBegin();
    DetourUpdateThread(GetCurrentThread());
    DetourDetach(&(PVOID&)TrueLoadLibrary, DetouredLoadLibrary);
    DetourTransactionCommit();
}

int main()
{
    // Установка глобального хука
    SetGlobalHook();

    // Ждем нажатия клавиши перед удалением хука
    std::cout << "Press any key to remove the hook..." << std::endl;
    std::cin.get();

    // Удаление глобального хука
    RemoveGlobalHook();

    return 0;
}
не работает глобально, что не так? есть такая же версия только в формате длл и без
C++:
TrueLoadLibrary = reinterpret_cast<HMODULE(WINAPI*)(LPCWSTR)>(GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "LoadLibraryW"));
и все работает
 

F0RQU1N and

Известный
1,307
498
C++:
#include <Windows.h>
#include <detours/detours.h>
#include <iostream>

static HMODULE(WINAPI* TrueLoadLibrary)(LPCWSTR lpLibFileName) = LoadLibraryW;

HMODULE WINAPI DetouredLoadLibrary(LPCWSTR lpLibFileName)
{
    HMODULE res = TrueLoadLibrary(lpLibFileName);
    MessageBoxW(NULL, lpLibFileName, L"Detoured!", MB_OK | MB_ICONEXCLAMATION);
    return res;
}

void SetGlobalHook()
{
    // Получение адреса оригинальной функции LoadLibraryW из kernel32.dll
    TrueLoadLibrary = reinterpret_cast<HMODULE(WINAPI*)(LPCWSTR)>(GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "LoadLibraryW"));

    // Установка хука
    DetourTransactionBegin();
    DetourUpdateThread(GetCurrentThread());
    DetourAttach(&(PVOID&)TrueLoadLibrary, DetouredLoadLibrary);
    DetourTransactionCommit();
}

// Функция для удаления глобального хука
void RemoveGlobalHook()
{
    // Удаление хука
    DetourTransactionBegin();
    DetourUpdateThread(GetCurrentThread());
    DetourDetach(&(PVOID&)TrueLoadLibrary, DetouredLoadLibrary);
    DetourTransactionCommit();
}

int main()
{
    // Установка глобального хука
    SetGlobalHook();

    // Ждем нажатия клавиши перед удалением хука
    std::cout << "Press any key to remove the hook..." << std::endl;
    std::cin.get();

    // Удаление глобального хука
    RemoveGlobalHook();

    return 0;
}
не работает глобально, что не так? есть такая же версия только в формате длл и без
C++:
TrueLoadLibrary = reinterpret_cast<HMODULE(WINAPI*)(LPCWSTR)>(GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "LoadLibraryW"));
и все работает
а в чем смысл? ты же в своем приложении хукаешь
 
  • Нравится
Реакции: colby57
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

zheluk!

Новичок
7
0
Как через plugin sdk + sampapi от blast.hk отправить нажатие\зажатие кнопки в игру, через стандартные C++ штучки по типу sendimput keybd персонаж ходит но не обрабатывает нажатие на e ( Использовать )
 

reussssya

Новичок
28
8
Как через plugin sdk + sampapi от blast.hk отправить нажатие\зажатие кнопки в игру, через стандартные C++ штучки по типу sendimput keybd персонаж ходит но не обрабатывает нажатие на e ( Использовать )
while(!GetAsyncKeyState(ид клавишы))
 

korsarsan

Участник
74
26
Вопрос знат0кам imgui
После запуска компа, и первого запуска сампа вылетает эта ошибка
C++:
ImGuiStyle& ImGui::GetStyle()
{
    IM_ASSERT(GImGui != NULL && "No current context. Did you call ImGui::CreateContext() and ImGui::SetCurrentContext() ?"); // <== ВОТ ЭТА
    return GImGui->Style;
}
И конечно же стиль не подгружается, но на второй запуск сампа и дальнейшие ошибка больше не вылезает и стиль нормально грузится
Кто знает че за магия ? )
 

AdCKuY_DpO4uLa

Адский дрочер
Друг
317
675
Вопрос знат0кам imgui
После запуска компа, и первого запуска сампа вылетает эта ошибка
C++:
ImGuiStyle& ImGui::GetStyle()
{
    IM_ASSERT(GImGui != NULL && "No current context. Did you call ImGui::CreateContext() and ImGui::SetCurrentContext() ?"); // <== ВОТ ЭТА
    return GImGui->Style;
}
И конечно же стиль не подгружается, но на второй запуск сампа и дальнейшие ошибка больше не вылезает и стиль нормально грузится
Кто знает че за магия ? )
Вероятнее всего ты не вызываешь ImGui::CreateContext(); при инициализации.
Если же ты вызываешь эту функцию, то можешь отключить ассерты имгуи в настройках (imconfig.h) для этого нужно раскомментировать строчку
//#define IM_ASSERT(_EXPR) ((void)(_EXPR))
 

funob

Новичок
7
1
Вопрос знатокам сф апи 551
Как сделать антиафк? (Включение/отключение плагином)
 

F0RQU1N and

Известный
1,307
498
Вопрос знатокам сф апи 551
Как сделать антиафк? (Включение/отключение плагином)
C++:
#include <Windows.h>
#include "SAMPFUNCS_API.h"
#include "game_api.h"

SAMPFUNCS* SF = new SAMPFUNCS( );

bool bafk = false, init = false;

void __stdcall mainloop( )
{
    if ( GAME && GAME->GetSystemState( ) == eSystemState::GS_PLAYING_GAME && SF->getSAMP( )->IsInitialized( ) && !init )
    {
        SF->getSAMP( )->registerChatCommand( "afk", []( std::string params ) {
            bafk ^= true;

            *(std::uint8_t*)0x747FB6 = bafk;
            *(std::uint8_t*)0x74805A = bafk;

            std::memcpy( (void*)0x74542B, bafk ? "\x90\x90\x90\x90\x90\x90\x90\x90" : "\x50\x51\xFF\x15\x00\x83\x85\x00", 8 );
            std::memcpy( (void*)0x53EA88, bafk ? "\x90\x90\x90\x90\x90\x90" : "\x0F\x84\x7B\x01\x00\x00", 6 );

            SF->getSAMP( )->getChat( )->AddChatMessage( 0xFFFFFFFFF, std::to_string( bafk ).c_str( ) );
        } );

        init = true;
    }
}

bool __stdcall DllMain( HMODULE hModule, DWORD dwReasonForCall, void* )
{
    if ( dwReasonForCall == DLL_PROCESS_ATTACH )
        SF->initPlugin( mainloop, hModule );

    return true;
}

адреса для патчей ес чо отсюда взял

Вероятнее всего ты не вызываешь ImGui::CreateContext(); при инициализации.
Если же ты вызываешь эту функцию, то можешь отключить ассерты имгуи в настройках (imconfig.h) для этого нужно раскомментировать строчку
//#define IM_ASSERT(_EXPR) ((void)(_EXPR))
всмысле, че за хуйню ты советуешь? зачем отключать ассерты там же дальше чтение идет GImGui->Style и просто крашить будет
 
Последнее редактирование: