Перейти к содержанию

Cheat Engine Помогите! как ставить галочки


Гость Aphex

Рекомендуемые сообщения

Доброго, уважаемые! подскажите, какой есть способ с помощью cheat Engine ставить и убирать галочки в программе и каким способом это можно сделать?

Есть программа, в ней квадратик, хочу чтобы галочка ставилась и убиралась, с помощью Cheat Engine,а не мышью!

Заранее спасибо!

Ссылка на комментарий
Поделиться на другие сайты

CheckBox в OS Windows это разновидность кнопки.

Кнопку мы так же привыкли называть контролом, но в свою очередь контрол в OS Windows является обычным окном.

Реализовать твою задумку можно следующим образом на С++:


#include <windows.h>
#include <iostream>

BOOL CALLBACK EnumChildProc(
HWND hWnd, // handle дочернего окна (контрола)
LPARAM lParam // здесь пользовательский параметр, в нашем случае это указатель на вектор хэндлов
)
{
std::vector<HWND>* wndCheckBoxes = reinterpret_cast< std::vector<HWND>* > (lParam); // приводим LPARAM к нужному нам типу

WINDOWINFO info = { 0 }; // инициализруем структуру нулями
info.cbSize = sizeof(WINDOWINFO); // инициализируем поле струтруры cbSize, так как оно подлежит обязательному заполнению

GetWindowInfo(hWnd, &info); // получаем информацию об окне

if (info.dwStyle & BS_CHECKBOX) // если стиль окна содержит BS_CHECKBOX
{
wndCheckBoxes->push_back(hWnd); // добавляем handle контрола (чекбокса) в наш вектор
}

return TRUE; // возвращаем TRUE, чтобы продложилось перечисление дочерних окон (и контролов)
}

void SetCheckBox(
HWND hWNd, // handle чекбокса, состояние которого мы хотим изменить
bool check // флаг отвечающий, за то, чтобы чекунуть или анчекнуть чекбокс
)
{
if (check)
{
PostMessage(hWNd, BM_SETCHECK, BST_CHECKED, 0); // поставить галочку
}
else
{
PostMessage(hWNd, BM_SETCHECK, BST_UNCHECKED, 0); // снять галочку
}
}

int main()
{
HWND hWnd = FindWindow(0, TEXT("заголовок окна"));
if (!hWnd)
{
printf("Can't find window!\n");
Sleep(2000);
return 0;
}

std::vector<HWND> windowCheckBoxes; // объявляем вектор (динамический массив), который будет хранить handle'ы чекбоксов
EnumChildWindows(hWnd, &EnumChildProc, reinterpret_cast<LPARAM> (&windowCheckBoxes)); // начинаем поиск check box'ов

size_t foundCheckBoxes = windowCheckBoxes.size();

if (foundCheckBoxes) // если количество найденных чекбоксов больше нуля
{
SetCheckBox(windowCheckBoxes[0], true); // поставить галочку первому найденному чекбоксу (индексация в массиве начинается с нуля)
}

return 0;
}

Использованный материал:

http://msdn.microsoft.com/ru-ru/library/windows/desktop/ms633499.aspx (FindWindow - поиск окна по классу и/или по заголовку)

http://msdn.microsof...p/ms633494.aspx (EnumChildWindows - перечисление всех дочерних окон окна)

http://msdn.microsof...p/ms633516.aspx (GetWindowInfo - получение информации об окне)

http://msdn.microsof...p/bb775951.aspx (Список стилей кнопок)

http://msdn.microsof...p/bb775989.aspx (BM_SETCHECK - сообщение для установки состояния checkbox'а)

http://msdn.microsof...p/ms644944.aspx (PostMessage - асинхронная функция отправки сообщения окна)

P.S. Код не отлаживал, писал в Notepad'е, но думаю он прекрасно демонстрирует нужный тебе алгоритм.

Ссылка на комментарий
Поделиться на другие сайты

CheckBox в OS Windows это разновидность кнопки.

Кнопку мы так же привыкли называть контролом, но в свою очередь контрол в OS Windows является обычным окном.

Реализовать твою задумку можно следующим образом на С++:


#include <windows.h>
#include <iostream>

BOOL CALLBACK EnumChildProc(
HWND hWnd, // handle дочернего окна (контрола)
LPARAM lParam // здесь пользовательский параметр, в нашем случае это указатель на вектор хэндлов
)
{
std::vector<HWND>* wndCheckBoxes = reinterpret_cast< std::vector<HWND>* > (lParam); // приводим LPARAM к нужному нам типу

WINDOWINFO info = { 0 }; // инициализруем структуру нулями
info.cbSize = sizeof(WINDOWINFO); // инициализируем поле струтруры cbSize, так как оно подлежит обязательному заполнению

GetWindowInfo(hWnd, &info); // получаем информацию об окне

if (info.dwStyle & BS_CHECKBOX) // если стиль окна содержит BS_CHECKBOX
{
wndCheckBoxes->push_back(hWnd); // добавляем handle контрола (чекбокса) в наш вектор
}

return TRUE; // возвращаем TRUE, чтобы продложилось перечисление дочерних окон (и контролов)
}

void SetCheckBox(
HWND hWNd, // handle чекбокса, состояние которого мы хотим изменить
bool check // флаг отвечающий, за то, чтобы чекунуть или анчекнуть чекбокс
)
{
if (check)
{
PostMessage(hWNd, BM_SETCHECK, BST_CHECKED, 0); // поставить галочку
}
else
{
PostMessage(hWNd, BM_SETCHECK, BST_UNCHECKED, 0); // снять галочку
}
}

int main()
{
HWND hWnd = FindWindow(0, TEXT("заголовок окна"));
if (!hWnd)
{
printf("Can't find window!\n");
Sleep(2000);
return 0;
}

std::vector<HWND> windowCheckBoxes; // объявляем вектор (динамический массив), который будет хранить handle'ы чекбоксов
EnumChildWindows(hWnd, &EnumChildProc, reinterpret_cast<LPARAM> (&windowCheckBoxes)); // начинаем поиск check box'ов

size_t foundCheckBoxes = windowCheckBoxes.size();

if (foundCheckBoxes) // если количество найденных чекбоксов больше нуля
{
SetCheckBox(windowCheckBoxes[0], true); // поставить галочку первому найденному чекбоксу (индексация в массиве начинается с нуля)
}

return 0;
}

Использованный материал:

http://msdn.microsof...p/ms633499.aspx (FindWindow - поиск окна по классу и/или по заголовку)

http://msdn.microsof...p/ms633494.aspx (EnumChildWindows - перечисление всех дочерних окон окна)

http://msdn.microsof...p/ms633516.aspx (GetWindowInfo - получение информации об окне)

http://msdn.microsof...p/bb775951.aspx (Список стилей кнопок)

http://msdn.microsof...p/bb775989.aspx (BM_SETCHECK - сообщение для установки состояния checkbox'а)

http://msdn.microsof...p/ms644944.aspx (PostMessage - асинхронная функция отправки сообщения окна)

P.S. Код не отлаживал, писал в Notepad'е, но думаю он прекрасно демонстрирует нужный тебе алгоритм.

Ох уважаемый спасибо огромное..но что куда тыкать....? и если например окно в игре, а там галочку надо ставить и убрать без мышки?!

Ссылка на комментарий
Поделиться на другие сайты

Если я правильно понял, нужно заморозить/разморозить сделанные опции в СЕ?)

Если так, то кликаем правой кнопкой мыши на опции - откроется меню, где выбираем "Хоткеи", и там настраиваем, какую кнопку надо нажать, чтобы активировать/деактивировать опцию.

Ссылка на комментарий
Поделиться на другие сайты

Похоже, пользователь хочет получить что-то вроде мини-бота для какой-то игры. В этом случае не поможет ни один из описанных выше способов.

Попробуй посмотреть

Ссылка на комментарий
Поделиться на другие сайты

скажем проще в игре чтобы галочку на полноэкранный/оконный режим можно было ставит с помощью чит энджина!

там галочку достаточно,

Ссылка на комментарий
Поделиться на другие сайты

скажем проще в игре чтобы галочку на полноэкранный/оконный режим можно было ставит с помощью чит энджина!

там галочку достаточно,

да... умеешь вопросы задавать. Пока читал чуть мозг не сломал.

Ссылка на комментарий
Поделиться на другие сайты

Тогда тебе нужно на СЕ делать хук DirectX, затем разбираться в конвейере, какой код отвечает за отрисовку этой галочку, затем искать код, который отвечает за считывание параметра, и его уже модифицировать. Только так.

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.