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

0x73616D

Активный
140
42
Can someone help me rewrite these snippets in C++? | Может ли кто-нибудь помочь мне переписать эти фрагменты на C++?

CLEO:
:get_samp_version_id
// 0AB1: @get_samp_version_id 0 _returned: ID 0@ 
30@ = 0
IF 0AA2: 31@ = "samp.dll" // IF and SET
THEN
    31@ += 0x128
    0A8D: 29@ = read_memory 31@ size 4 virtual_protect 1
    IF 29@ == 0x5542F47A
    THEN // 0.3.7 R1
        30@ = 1
    END
    
    IF 29@ == 0x59C30C94
    THEN // 0.3.7 R2
        30@ = 2
    END
    
    IF 29@ == 0x5A6A3130
    THEN // 0.3.DL
        30@ = 3
    END
    31@ -= 8 // reading samp.dll + 0x120
    0A8D: 29@ = read_memory 31@ size 4 virtual_protect 1
    IF 29@ == 0x5C0B4243
    THEN // 0.3.7 R3
        30@ = 4
    END 
    
    IF 29@ == 0x5DD606CD
    THEN // 0.3.7 R4
        30@ = 5
    END
    IF 29@ == 0x6094ACAB
    THEN // 0.3.7 R4 - v2
        30@ = 6
    END
    IF 29@ == 0x6372C39E
    THEN // 0.3.7 R5
        30@ = 7
    END
END
0AB2: ret 1 30@
CLEO:
:GetLocalPlayerName
{
    0AB1: @GetLocalPlayerName 0 _Returned: NameInIntegerFormat 31@
}
IF 0AA2: 31@ = "samp.dll"
THEN
    0AB1: @get_samp_version_id 0 _returned: ID 17@
    IF 17@ > 0
    THEN
        IF 17@ == 1 // 0.3.7 R1
        THEN
            0A8E: 30@ = 31@ + 0x21A0F8 // SAMP_INFO_OFFSET
            0A8D: 30@ = readMem 30@ sz 4 vp 0
            30@ += 0x3CD // SAMP_PPOOLS_OFFSET       
            0A8D: 30@ = readMem 30@ sz 4 vp 0
            30@ += 0x18 // SAMP_PPOOL_PLAYER_OFFSET       
            0A8D: 30@ = readMem 30@ sz 4 vp 0
      
            0A8E: 29@ = 31@ + 0x13CD0 // SAMP_GET_LOCAL_PLAYER_NAME_OFFSET
        END
        IF 17@ == 2 // 0.3.7 R2
        THEN
            0A8E: 30@ = 31@ + 0x21A100 // SAMP_INFO_OFFSET   
            0A8D: 30@ = readMem 30@ sz 4 vp 0
            30@ += 0x3C5 // SAMP_PPOOLS_OFFSET         
            0A8D: 30@ = readMem 30@ sz 4 vp 0
            30@ += 0x8 // SAMP_PPOOL_PLAYER_OFFSET         
            0A8D: 30@ = readMem 30@ sz 4 vp 0
        
            0A8E: 29@ = 31@ + 0x13D90 // SAMP_GET_LOCAL_PLAYER_NAME_OFFSET
        END
      
        IF 17@ == 3 // 0.3.DL
        THEN
            0A8E: 30@ = 31@ + 0x2ACA24 // SAMP_INFO_OFFSET
            0A8D: 30@ = readMem 30@ sz 4 vp 0
            30@ += 0x3DE // SAMP_PPOOLS_OFFSET       
            0A8D: 30@ = readMem 30@ sz 4 vp 0
            30@ += 0x8 // SAMP_PPOOL_PLAYER_OFFSET       
            0A8D: 30@ = readMem 30@ sz 4 vp 0
      
            0A8E: 29@ = 31@ + 0x170C0 // SAMP_GET_LOCAL_PLAYER_NAME_OFFSET
        END
      
        IF 17@ == 4 // 0.3.7 R3
        THEN
            0A8E: 30@ = 31@ + 0x26E8DC // SAMP_INFO_OFFSET   
            0A8D: 30@ = readMem 30@ sz 4 vp 0
            30@ += 0x3DE // SAMP_PPOOLS_OFFSET           
            0A8D: 30@ = readMem 30@ sz 4 vp 0
            30@ += 0x8 // SAMP_PPOOL_PLAYER_OFFSET           
            0A8D: 30@ = readMem 30@ sz 4 vp 0
        
            0A8E: 29@ = 31@ + 0x16EF0 // SAMP_GET_LOCAL_PLAYER_NAME_OFFSET
        END
      
        IF 17@ == 5 // 0.3.7 R4
        THEN
            0A8E: 30@ = 31@ + 0x26EA0C // SAMP_INFO_OFFSET 
            0A8D: 30@ = readMem 30@ sz 4 vp 0
            30@ += 0x3DE // SAMP_PPOOLS_OFFSET         
            0A8D: 30@ = readMem 30@ sz 4 vp 0
            30@ += 0x8 // SAMP_PPOOL_PLAYER_OFFSET         
            0A8D: 30@ = readMem 30@ sz 4 vp 0
      
            0A8E: 29@ = 31@ + 0x17560 // SAMP_GET_LOCAL_PLAYER_NAME_OFFSET
        END
      
        IF 17@ == 6 // 0.3.7 R4 - v2
        THEN
            0A8E: 30@ = 31@ + 0x26EA0C // SAMP_INFO_OFFSET 
            0A8D: 30@ = readMem 30@ sz 4 vp 0
            30@ += 0x3DE // SAMP_PPOOLS_OFFSET         
            0A8D: 30@ = readMem 30@ sz 4 vp 0
            30@ += 0x4 // SAMP_PPOOL_PLAYER_OFFSET         
            0A8D: 30@ = readMem 30@ sz 4 vp 0
      
            0A8E: 29@ = 31@ + 0x175B0 // SAMP_GET_LOCAL_PLAYER_NAME_OFFSET
        END
      
        IF 17@ == 7 // 0.3.7 R5
        THEN
            0A8E: 30@ = 31@ + 0x26EB94 // SAMP_INFO_OFFSET 
            0A8D: 30@ = readMem 30@ sz 4 vp 0
            30@ += 0x3DE // SAMP_PPOOLS_OFFSET         
            0A8D: 30@ = readMem 30@ sz 4 vp 0
            30@ += 0x4 // SAMP_PPOOL_PLAYER_OFFSET         
            0A8D: 30@ = readMem 30@ sz 4 vp 0
      
            0A8E: 29@ = 31@ + 0x175B0 // SAMP_GET_LOCAL_PLAYER_NAME_OFFSET
        END
      
        0AA8: call_function_method 29@ struct 30@ num_params 0 pop 0 _Returned: Name 28@
        /// Returned value is in integer, convert integer to string to get string...
    END
END
0AB2: ret 0
 

EclipsedFlow

Известный
Проверенный
1,043
474
Can someone help me rewrite these snippets in C++? | Может ли кто-нибудь помочь мне переписать эти фрагменты на C++?

CLEO:
:get_samp_version_id
// 0AB1: @get_samp_version_id 0 _returned: ID 0@
30@ = 0
IF 0AA2: 31@ = "samp.dll" // IF and SET
THEN
    31@ += 0x128
    0A8D: 29@ = read_memory 31@ size 4 virtual_protect 1
    IF 29@ == 0x5542F47A
    THEN // 0.3.7 R1
        30@ = 1
    END
  
    IF 29@ == 0x59C30C94
    THEN // 0.3.7 R2
        30@ = 2
    END
  
    IF 29@ == 0x5A6A3130
    THEN // 0.3.DL
        30@ = 3
    END
    31@ -= 8 // reading samp.dll + 0x120
    0A8D: 29@ = read_memory 31@ size 4 virtual_protect 1
    IF 29@ == 0x5C0B4243
    THEN // 0.3.7 R3
        30@ = 4
    END
  
    IF 29@ == 0x5DD606CD
    THEN // 0.3.7 R4
        30@ = 5
    END
    IF 29@ == 0x6094ACAB
    THEN // 0.3.7 R4 - v2
        30@ = 6
    END
    IF 29@ == 0x6372C39E
    THEN // 0.3.7 R5
        30@ = 7
    END
END
0AB2: ret 1 30@
CLEO:
:GetLocalPlayerName
{
    0AB1: @GetLocalPlayerName 0 _Returned: NameInIntegerFormat 31@
}
IF 0AA2: 31@ = "samp.dll"
THEN
    0AB1: @get_samp_version_id 0 _returned: ID 17@
    IF 17@ > 0
    THEN
        IF 17@ == 1 // 0.3.7 R1
        THEN
            0A8E: 30@ = 31@ + 0x21A0F8 // SAMP_INFO_OFFSET
            0A8D: 30@ = readMem 30@ sz 4 vp 0
            30@ += 0x3CD // SAMP_PPOOLS_OFFSET     
            0A8D: 30@ = readMem 30@ sz 4 vp 0
            30@ += 0x18 // SAMP_PPOOL_PLAYER_OFFSET     
            0A8D: 30@ = readMem 30@ sz 4 vp 0
    
            0A8E: 29@ = 31@ + 0x13CD0 // SAMP_GET_LOCAL_PLAYER_NAME_OFFSET
        END
        IF 17@ == 2 // 0.3.7 R2
        THEN
            0A8E: 30@ = 31@ + 0x21A100 // SAMP_INFO_OFFSET 
            0A8D: 30@ = readMem 30@ sz 4 vp 0
            30@ += 0x3C5 // SAMP_PPOOLS_OFFSET       
            0A8D: 30@ = readMem 30@ sz 4 vp 0
            30@ += 0x8 // SAMP_PPOOL_PLAYER_OFFSET       
            0A8D: 30@ = readMem 30@ sz 4 vp 0
      
            0A8E: 29@ = 31@ + 0x13D90 // SAMP_GET_LOCAL_PLAYER_NAME_OFFSET
        END
    
        IF 17@ == 3 // 0.3.DL
        THEN
            0A8E: 30@ = 31@ + 0x2ACA24 // SAMP_INFO_OFFSET
            0A8D: 30@ = readMem 30@ sz 4 vp 0
            30@ += 0x3DE // SAMP_PPOOLS_OFFSET     
            0A8D: 30@ = readMem 30@ sz 4 vp 0
            30@ += 0x8 // SAMP_PPOOL_PLAYER_OFFSET     
            0A8D: 30@ = readMem 30@ sz 4 vp 0
    
            0A8E: 29@ = 31@ + 0x170C0 // SAMP_GET_LOCAL_PLAYER_NAME_OFFSET
        END
    
        IF 17@ == 4 // 0.3.7 R3
        THEN
            0A8E: 30@ = 31@ + 0x26E8DC // SAMP_INFO_OFFSET 
            0A8D: 30@ = readMem 30@ sz 4 vp 0
            30@ += 0x3DE // SAMP_PPOOLS_OFFSET         
            0A8D: 30@ = readMem 30@ sz 4 vp 0
            30@ += 0x8 // SAMP_PPOOL_PLAYER_OFFSET         
            0A8D: 30@ = readMem 30@ sz 4 vp 0
      
            0A8E: 29@ = 31@ + 0x16EF0 // SAMP_GET_LOCAL_PLAYER_NAME_OFFSET
        END
    
        IF 17@ == 5 // 0.3.7 R4
        THEN
            0A8E: 30@ = 31@ + 0x26EA0C // SAMP_INFO_OFFSET
            0A8D: 30@ = readMem 30@ sz 4 vp 0
            30@ += 0x3DE // SAMP_PPOOLS_OFFSET       
            0A8D: 30@ = readMem 30@ sz 4 vp 0
            30@ += 0x8 // SAMP_PPOOL_PLAYER_OFFSET       
            0A8D: 30@ = readMem 30@ sz 4 vp 0
    
            0A8E: 29@ = 31@ + 0x17560 // SAMP_GET_LOCAL_PLAYER_NAME_OFFSET
        END
    
        IF 17@ == 6 // 0.3.7 R4 - v2
        THEN
            0A8E: 30@ = 31@ + 0x26EA0C // SAMP_INFO_OFFSET
            0A8D: 30@ = readMem 30@ sz 4 vp 0
            30@ += 0x3DE // SAMP_PPOOLS_OFFSET       
            0A8D: 30@ = readMem 30@ sz 4 vp 0
            30@ += 0x4 // SAMP_PPOOL_PLAYER_OFFSET       
            0A8D: 30@ = readMem 30@ sz 4 vp 0
    
            0A8E: 29@ = 31@ + 0x175B0 // SAMP_GET_LOCAL_PLAYER_NAME_OFFSET
        END
    
        IF 17@ == 7 // 0.3.7 R5
        THEN
            0A8E: 30@ = 31@ + 0x26EB94 // SAMP_INFO_OFFSET
            0A8D: 30@ = readMem 30@ sz 4 vp 0
            30@ += 0x3DE // SAMP_PPOOLS_OFFSET       
            0A8D: 30@ = readMem 30@ sz 4 vp 0
            30@ += 0x4 // SAMP_PPOOL_PLAYER_OFFSET       
            0A8D: 30@ = readMem 30@ sz 4 vp 0
    
            0A8E: 29@ = 31@ + 0x175B0 // SAMP_GET_LOCAL_PLAYER_NAME_OFFSET
        END
    
        0AA8: call_function_method 29@ struct 30@ num_params 0 pop 0 _Returned: Name 28@
        /// Returned value is in integer, convert integer to string to get string...
    END
END
0AB2: ret 0
Это не идеальный код но для примера сойдет. Другую функцию можно по аналогии сделать.

C++:
int get_samp_version_id(void)
{
    DWORD version_current = 0;
    DWORD samp_base = GetModuleHandle("samp.dll");

    if (samp_base)
    {
        DWORD version_id = *(DWORD*)(samp_base + 0x128);
       
        switch (version_id) {
            case 0x5542F47A: // R1
                version_current = 1;
                break;
            case 0x59C30C94: // R2
                version_current = 2;
                break;
            case 0x5A6A3130: // DL
                version_current = 3;
                break;
        }

       
        version_id = *(DWORD*)(samp_base + 0x120);
       
        switch (version_id) {
            case 0x5C0B4243: // R3
                version_current = 4;
                break;
            case 0x5DD606CD: // R4 - v1
                version_current = 5;
                break;
            case 0x6094ACAB: // R4 - v2
                version_current = 6;
                break;
            case 0x6372C39E: // R5
                version_current = 7;
                break;
        }
    }
    return version_id;
}
 
  • Нравится
Реакции: 0x73616D и Z3roKwq
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Кто сможет помочь, почему не может установится хук, выводит мне: Ошибка установки хука: 1428, запускаю от имени администратора, антивируса нету, в чем может быть проблема? мб настройка проекта
C++:
#include <Windows.h>
#include <iostream>
#include <string>

using namespace std;

LRESULT CALLBACK HookProcedure(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode == HSHELL_WINDOWCREATED)
    {
        HWND hwnd = (HWND)lParam;
        char title[1024];
        GetWindowTextA(hwnd, title, sizeof(title));
        cout << "Создано новое окно: " << title << endl;
    }

    return CallNextHookEx(NULL, nCode, wParam, lParam);
}

int main()
{
    // Устанавливаем глобальный хук на создание окон
    HHOOK hook = SetWindowsHookEx(WH_SHELL, HookProcedure, NULL, 0);
    if (hook == NULL)
    {
        cout << "Ошибка установки хука: " << GetLastError() << endl;
        return 1;
    }

    // Ожидаем нажатия клавиши
    cout << "Хук установлен. Нажмите любую клавишу для выхода." << endl;
    cin.get();

    // Отключаем хук
    UnhookWindowsHookEx(hook);

    return 0;
}

другие хуки работают, особенно те которые не требуют прав администратора, к примеру этот код работает
C++:
#include <Windows.h>
#include <iostream>
#include <string>

using namespace std;

LRESULT CALLBACK HookProcedure(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode == HC_ACTION)
    {
        switch (wParam)
        {
            case WM_LBUTTONDOWN:
                cout << "Нажата левая кнопка мыши" << endl;
                break;
            case WM_LBUTTONUP:
                cout << "Отпущена левая кнопка мыши" << endl;
                break;
            case WM_RBUTTONDOWN:
                cout << "Нажата правая кнопка мыши" << endl;
                break;
            case WM_RBUTTONUP:
                cout << "Отпущена правая кнопка мыши" << endl;
                break;
            case WM_MBUTTONDOWN:
                cout << "Нажата средняя кнопка мыши" << endl;
                break;
            case WM_MBUTTONUP:
                cout << "Отпущена средняя кнопка мыши" << endl;
                break;
            default:
                break;
        }
    }

    return CallNextHookEx(NULL, nCode, wParam, lParam);
}

int main()
{
    // Запускаем процесс
    STARTUPINFO si = { sizeof(si) };
    PROCESS_INFORMATION pi;
    if (!CreateProcess(L"C:\\Windows\\notepad.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
    {
        cout << "Ошибка запуска процесса: " << GetLastError() << endl;
        return 1;
    }

    // Устанавливаем глобальный хук на процесс
    HHOOK hook = SetWindowsHookEx(WH_MOUSE_LL, HookProcedure, NULL, 0);
    if (hook == NULL)
    {
        cout << "Ошибка установки хука: " << GetLastError() << endl;
        return 1;
    }

    // Ожидаем завершения процесса
    WaitForSingleObject(pi.hProcess, INFINITE);

    // Отключаем хук
    UnhookWindowsHookEx(hook);

    // Закрываем дескрипторы процесса и потока
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);

    return 0;
}
😒😢
 

ARMOR

Модератор по раксампу
Модератор
4,936
6,732
Кто сможет помочь, почему не может установится хук, выводит мне: Ошибка установки хука: 1428, запускаю от имени администратора, антивируса нету, в чем может быть проблема? мб настройка проекта
C++:
#include <Windows.h>
#include <iostream>
#include <string>

using namespace std;

LRESULT CALLBACK HookProcedure(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode == HSHELL_WINDOWCREATED)
    {
        HWND hwnd = (HWND)lParam;
        char title[1024];
        GetWindowTextA(hwnd, title, sizeof(title));
        cout << "Создано новое окно: " << title << endl;
    }

    return CallNextHookEx(NULL, nCode, wParam, lParam);
}

int main()
{
    // Устанавливаем глобальный хук на создание окон
    HHOOK hook = SetWindowsHookEx(WH_SHELL, HookProcedure, NULL, 0);
    if (hook == NULL)
    {
        cout << "Ошибка установки хука: " << GetLastError() << endl;
        return 1;
    }

    // Ожидаем нажатия клавиши
    cout << "Хук установлен. Нажмите любую клавишу для выхода." << endl;
    cin.get();

    // Отключаем хук
    UnhookWindowsHookEx(hook);

    return 0;
}

другие хуки работают, особенно те которые не требуют прав администратора, к примеру этот код работает
C++:
#include <Windows.h>
#include <iostream>
#include <string>

using namespace std;

LRESULT CALLBACK HookProcedure(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode == HC_ACTION)
    {
        switch (wParam)
        {
            case WM_LBUTTONDOWN:
                cout << "Нажата левая кнопка мыши" << endl;
                break;
            case WM_LBUTTONUP:
                cout << "Отпущена левая кнопка мыши" << endl;
                break;
            case WM_RBUTTONDOWN:
                cout << "Нажата правая кнопка мыши" << endl;
                break;
            case WM_RBUTTONUP:
                cout << "Отпущена правая кнопка мыши" << endl;
                break;
            case WM_MBUTTONDOWN:
                cout << "Нажата средняя кнопка мыши" << endl;
                break;
            case WM_MBUTTONUP:
                cout << "Отпущена средняя кнопка мыши" << endl;
                break;
            default:
                break;
        }
    }

    return CallNextHookEx(NULL, nCode, wParam, lParam);
}

int main()
{
    // Запускаем процесс
    STARTUPINFO si = { sizeof(si) };
    PROCESS_INFORMATION pi;
    if (!CreateProcess(L"C:\\Windows\\notepad.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
    {
        cout << "Ошибка запуска процесса: " << GetLastError() << endl;
        return 1;
    }

    // Устанавливаем глобальный хук на процесс
    HHOOK hook = SetWindowsHookEx(WH_MOUSE_LL, HookProcedure, NULL, 0);
    if (hook == NULL)
    {
        cout << "Ошибка установки хука: " << GetLastError() << endl;
        return 1;
    }

    // Ожидаем завершения процесса
    WaitForSingleObject(pi.hProcess, INFINITE);

    // Отключаем хук
    UnhookWindowsHookEx(hook);

    // Закрываем дескрипторы процесса и потока
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);

    return 0;
}
😒😢
Я конечно не уверен, но почему у тебя HWND это просто скащеный lParam? HWND является же первым аргументом wndProc'а
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Я конечно не уверен, но почему у тебя HWND это просто скащеный lParam? HWND является же первым аргументом wndProc'а
это не решает проблему


C++:
#include <Windows.h>
#include <iostream>
#include <string>

using namespace std;

HHOOK hHook;

LRESULT CALLBACK HookProcedure(int nCode, WPARAM wParam, LPARAM lParam)
{
    cout << "Хук продус" << endl;
    if (nCode == HCBT_CREATEWND)
    {
        HWND hwnd = (HWND)wParam;
        char title[1024];
        GetWindowTextA(hwnd, title, sizeof(title));
        cout << "Создано новое окно: " << title << endl;
    }

    return CallNextHookEx(hHook, nCode, wParam, lParam);
}

int main()
{
    // Устанавливаем глобальный хук на создание окон
    hHook = SetWindowsHookEx(WH_CBT, (HOOKPROC)HookProcedure, NULL, GetCurrentThreadId());
    if (hHook == NULL)
    {
        cout << "Ошибка установки хука: " << GetLastError() << endl;
        return 1;
    }

    // Ожидаем нажатия клавиши
    cout << "Хук установлен. Нажмите любую клавишу для выхода." << endl;
    cin.get();

    // Отключаем хук
    UnhookWindowsHookEx(hHook);

    return 0;
}
изменил прогу, теперь при запуске проги, пишет что хук установлен, только при запуске программ ничего не выводится в консоль, и отладочная строчка не появляется cout << "Хук продус" << endl;
 
Последнее редактирование:

Young123

Новичок
10
0
Как выделить активные кнопки в ImGui?
То есть когда я нажимаю на кнопку она становится другого цвета, типо активная, нажимаю второй раз она уже не другого цвета, то есть не активная
 

korsarsan

Участник
74
26
Знает кто как поправить, с помощью plugin sdk хочу вывести значение патронов в обойме, но вы выводит -0, что не так ?
C++:
CPed* pPedSelf = FindPlayerPed();
            char Barr[50];
            sprintf(Barr, "%d", pPedSelf->m_aWeapons->m_nAmmoInClip);
            pRender->DrawString(pRender->pHPFont, Barr, { 1535 ,668, 1 }, 25, g_Config.g_Style.vecTheme[ImGuiCol_HP], true);
 

Musaigen

abobusnik
Проверенный
1,606
1,361
Знает кто как поправить, с помощью plugin sdk хочу вывести значение патронов в обойме, но вы выводит -0, что не так ?
C++:
CPed* pPedSelf = FindPlayerPed();
            char Barr[50];
            sprintf(Barr, "%d", pPedSelf->m_aWeapons->m_nAmmoInClip);
            pRender->DrawString(pRender->pHPFont, Barr, { 1535 ,668, 1 }, 25, g_Config.g_Style.vecTheme[ImGuiCol_HP], true);
m_aWeapons это массив как бы
 
  • Нравится
Реакции: korsarsan и ARMOR

ARMOR

Модератор по раксампу
Модератор
4,936
6,732
Знает кто как поправить, с помощью plugin sdk хочу вывести значение патронов в обойме, но вы выводит -0, что не так ?
C++:
CPed* pPedSelf = FindPlayerPed();
            char Barr[50];
            sprintf(Barr, "%d", pPedSelf->m_aWeapons->m_nAmmoInClip);
            pRender->DrawString(pRender->pHPFont, Barr, { 1535 ,668, 1 }, 25, g_Config.g_Style.vecTheme[ImGuiCol_HP], true);
C++:
CPed* Ped = FindPlayerPed();
char weaponSlot = Ped->m_nActiveWeaponSlot;
CWeapon* Weapon = Ped->m_aWeapons;
int ammoInClip = Weapon[weaponSlot].m_nAmmoInClip;
 
  • Влюблен
  • Нравится
Реакции: korsarsan и Z3roKwq
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
это не решает проблему


C++:
#include <Windows.h>
#include <iostream>
#include <string>

using namespace std;

HHOOK hHook;

LRESULT CALLBACK HookProcedure(int nCode, WPARAM wParam, LPARAM lParam)
{
    cout << "Хук продус" << endl;
    if (nCode == HCBT_CREATEWND)
    {
        HWND hwnd = (HWND)wParam;
        char title[1024];
        GetWindowTextA(hwnd, title, sizeof(title));
        cout << "Создано новое окно: " << title << endl;
    }

    return CallNextHookEx(hHook, nCode, wParam, lParam);
}

int main()
{
    // Устанавливаем глобальный хук на создание окон
    hHook = SetWindowsHookEx(WH_CBT, (HOOKPROC)HookProcedure, NULL, GetCurrentThreadId());
    if (hHook == NULL)
    {
        cout << "Ошибка установки хука: " << GetLastError() << endl;
        return 1;
    }

    // Ожидаем нажатия клавиши
    cout << "Хук установлен. Нажмите любую клавишу для выхода." << endl;
    cin.get();

    // Отключаем хук
    UnhookWindowsHookEx(hHook);

    return 0;
}
изменил прогу, теперь при запуске проги, пишет что хук установлен, только при запуске программ ничего не выводится в консоль, и отладочная строчка не появляется cout << "Хук продус" << endl;
ап
 
  • Грустно
Реакции: deleted-user-511790
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Это у тебя консоль? Там вроде есть фигня, что с консолями такое криво работает.
да консоль, мне нужна хоть как-то проверить работу этого, использую пока консоль
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Сделай приложение Win32
все так же
C++:
#include <Windows.h>
#include <string>

using namespace std;

HHOOK hHook;
HWND hListBox;

void Debug(const char* message)
{
    std::string errorMsg = std::string(message) + std::to_string(GetLastError());
    SendMessageA(hListBox, LB_ADDSTRING, 0, (LPARAM)errorMsg.c_str());
}

LRESULT CALLBACK HookProcedure(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode == HCBT_CREATEWND)
    {
        HWND hwnd = (HWND)wParam;
        char title[1024];
        GetWindowTextA(hwnd, title, sizeof(title));
        SendMessageA(hListBox, LB_ADDSTRING, 0, (LPARAM)title);
    }

    return CallNextHookEx(hHook, nCode, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    HWND hWnd = CreateWindowEx(0, L"ListBox", L"f", WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_VSCROLL | LBS_NOTIFY, 100, 100, 400, 300, NULL, NULL, hInstance, NULL);
    if (hWnd == NULL)
    {
        Debug("Ошибка создания окна: ");
        return 1;
    }

    hListBox = hWnd;

    hHook = SetWindowsHookEx(WH_CBT, HookProcedure, NULL, GetCurrentThreadId());
    if (hHook == NULL)
    {
        Debug("Ошибка установки хука: ");
        return 1;
    }

    Debug("Все ок: ");

    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }


    UnhookWindowsHookEx(hHook);

    return 0;
}
 

_doomsday_

Новичок
15
3
InputText вместо кириллицы выводит цифры и символы
Кириллические глифы в подгрузке шрифта есть (шрифт стандартный), WM_CHAR менял
В чем еще может быть проблема?