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

x0r1x

Потрачен
112
99
Возникла необходимость смены Window Text после инициализации.
Сделал вот так, не работает, кто подскажет в чём может быть проблема? И где моя ошибка

с++:
#include "pch.h"
#include <windows.h>
#include <stdio.h>

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
    if (fdwReason == DLL_PROCESS_ATTACH)
    {
        HWND hwnd = FindWindow(NULL, L"GTA:SA:MP");
        if (hwnd == NULL)
            return FALSE;
        SetWindowText(hwnd, L"GTA:NewText");

        //debug
        MessageBox(NULL, L"ASI initialization successful!", L"Success", MB_OK);
        FILE* f;
        fopen_s(&f, "SetWindowText.log", "a");
        fprintf(f, "Success\n");
        fclose(f);
    }
    return TRUE;
}
в dll_process_attach в твоём случае чтобы исполнить код который ты хочешь нужно ставить инициализацию функции где будет лежать код который тебе надо, и инициализироваться он должен обязательно через:
C++:
std::thread(name_func).detach();
вот тебе пример:
C++:
#include <windows.h>
#include <stdio.h>
#include <thread>
#include <iostream>

bool func() {
    HWND hwnd = FindWindowA(nullptr, "GTA:SA:MP");
    if (hwnd == NULL) {
        MessageBoxA(nullptr, "ПИЗДЕЦ НАХУЙ", "ПИЗДЕЦ", MB_OK);
        return true;
    }
    SetWindowTextA(hwnd, "GTA:NewText");
    MessageBoxA(nullptr, "ASI initialization successful!", "Success", MB_OK);
    FILE* f;
    fopen_s(&f, "SetWindowText.log", "a");
    fprintf(f, "Success\n");
    fclose(f);
}

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
    if (fdwReason == DLL_PROCESS_ATTACH)
    {
        std::thread(func).detach();
    }
    return TRUE;
}
 
Последнее редактирование:
  • Нравится
Реакции: writeline

ARMOR

God has forsaken us
Модератор
5,060
7,465
Возникла необходимость смены Window Text после инициализации.
Сделал вот так, не работает, кто подскажет в чём может быть проблема? И где моя ошибка

с++:
#include "pch.h"
#include <windows.h>
#include <stdio.h>

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
    if (fdwReason == DLL_PROCESS_ATTACH)
    {
        HWND hwnd = FindWindow(NULL, L"GTA:SA:MP");
        if (hwnd == NULL)
            return FALSE;
        SetWindowText(hwnd, L"GTA:NewText");

        //debug
        MessageBox(NULL, L"ASI initialization successful!", L"Success", MB_OK);
        FILE* f;
        fopen_s(&f, "SetWindowText.log", "a");
        fprintf(f, "Success\n");
        fclose(f);
    }
    return TRUE;
}
До инициализации игры у окна другое название, поэтому плагин и не может найти GTA:SA:MP. Дожидайся загрузки игры например хуком CTimer::Update и уже тогда делай поиск по названию окна.
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,757
4,895
в dll_process_attach в твоём случае чтобы исполнить код который ты хочешь нужно ставить инициализацию функции где будет лежать код который тебе надо, и инициализироваться он должен обязательно через:
C++:
std::thread(name_func).detach();
вот тебе пример:
C++:
#include <windows.h>
#include <stdio.h>
#include <thread>
#include <iostream>

bool func() {
    HWND hwnd = FindWindowA(nullptr, "GTA:SA:MP");
    if (hwnd == NULL) {
        MessageBoxA(nullptr, "ПИЗДЕЦ НАХУЙ", "ПИЗДЕЦ", MB_OK);
        return true;
    }
    SetWindowTextA(hwnd, "GTA:NewText");
    MessageBoxA(nullptr, "ASI initialization successful!", "Success", MB_OK);
    FILE* f;
    fopen_s(&f, "SetWindowText.log", "a");
    fprintf(f, "Success\n");
    fclose(f);
}

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
    if (fdwReason == DLL_PROCESS_ATTACH)
    {
        std::thread(func).detach();
    }
    return TRUE;
}
и получить гонку потоков, не найденное окно, потому что там будет Grand Theft Auto: San Andreas, а не GTA:SAMP
 
  • Нравится
Реакции: ARMOR и Savok

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,757
4,895
До инициализации игры у окна другое название, поэтому плагин и не может найти GTA:SA:MP. Дожидайся загрузки игры например хуком CTimer::Update и уже тогда делай поиск по названию окна.
А можно просто HWND окна из памяти игры дернуть...
 
  • Нравится
Реакции: ARMOR

Sadow

Известный
1,411
582
Как прямо в таблице изменить местоположение какому-то элементу? Тоесть. К примеру есть массив:
C++:
const char table[] = {'n', 'e', 'g', 'r'}
И внутри массива мне надо присвоить первому элементу местоположение 5.
 

ARMOR

God has forsaken us
Модератор
5,060
7,465
Как прямо в таблице изменить местоположение какому-то элементу? Тоесть. К примеру есть массив:
C++:
const char table[] = {'n', 'e', 'g', 'r'}
И внутри массива мне надо присвоить первому элементу местоположение 5.
Ты не установишь его на 5ку потому что у тебя будет всего 0, 1, 2, 3. Нужно будет как минимум пересоздавать массив.
 

maynkraftpro2010

Известный
433
239
Что такое хендл педа/транспорта/объекта? Везде используются эти хендлы, но нигде не объясняется что это такое (я не нашел). Это какие-то идентификаторы, или индексы объекта в пуле, или что-то ещё?
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,757
4,895
Что такое хендл педа/транспорта/объекта? Везде используются эти хендлы, но нигде не объясняется что это такое (я не нашел). Это какие-то идентификаторы, или индексы объекта в пуле, или что-то ещё?
Индекс обьекта в пуле
 
  • Нравится
Реакции: Z3roKwq и maynkraftpro2010

vadgayka

Новичок
2
0
Дайте новые (самп 0.3.7 r5)
CoordX := ReadMemoryFloat(0xB6F5F0) CoordY := ReadMemoryFloat(0xB6F5F4) CoordZ := ReadMemoryFloat(0xB6F5F8) (нужно узнать x y z локального игрока)
 
Последнее редактирование:

Receiver

leet-cheats 👑
Модератор
663
1,008
Размер обычного массива в плюсах менять нельзя. Вроде как только размер динамичесского можно менять как-то
В целом можно, но нужно реаллоцировать память. std::vector делает это автоматически.
 
  • Нравится
Реакции: Z3roKwq