Принцип бота - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Я хотел бы в будущем, когда научусь программировать, написать бота для игры (игр). Я немного подумал и в целом это выглядит так: 1. Считать информацию из игры 2. Произвести с полученными данными операции 3. Отдать новые команды в игру посредством симуляции клавиатуры и мыши. Так можно будет?

Решение задачи: «Принцип бота»

textual
Листинг программы
typedef DWORD (WINAPI*pRecvMem)(LPVOID Data);
 
struct SESION_PARM
{
    LPVOID Class;
    LPVOID Echo;
};
 
 
CBotClient::CBotClient(CHAR * lpEventName,CHAR * lpEventTerminationName,CHAR * lpFileShareName)
{
    // Открываем объект-событие для синхронизации 
    // ввода и отображения
    hEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, lpEventName);
 
    if(hEvent == NULL)
    {
        MessageBoxA(0,"OpenEvent: Error!",0,MB_OK | MB_ICONERROR | MB_SYSTEMMODAL);
//      fprintf(stdout,"OpenEvent: Error %ld\n", 
//          GetLastError());
//      _getch();
        return;
    }
 
    // Открываем объект-событие для сигнализации о
    // завершении процесса ввода
    hEventTermination = OpenEvent(EVENT_ALL_ACCESS, 
        FALSE, lpEventTerminationName);
 
    if(hEventTermination == NULL)
    {
        MessageBoxA(0,"OpenEvent (Termination): Error!",0,MB_OK | MB_ICONERROR | MB_SYSTEMMODAL);
//      fprintf(stdout,"OpenEvent (Termination): Error %ld\n", 
//          GetLastError());
//      _getch();
        return;
    }
 
    // Открываем объект-отображение
    hFileMapping = OpenFileMapping(
        FILE_MAP_READ | FILE_MAP_WRITE, FALSE, lpFileShareName);
 
    // Если открыть не удалось, выводим код ошибки
    if(hFileMapping == NULL)
    {
        MessageBoxA(0,"OpenFileMapping: Error!",0,MB_OK | MB_ICONERROR | MB_SYSTEMMODAL);
//      fprintf(stdout,"OpenFileMapping: Error %ld\n", 
//          GetLastError());
//      _getch();
        return;
    }
 
    // Выполняем отображение файла на память.
    // В переменную lpFileMap будет записан указатель на
    // отображаемую область памяти
    lpFileMap = MapViewOfFile(hFileMapping, 
        FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);
 
    // Если выполнить отображение не удалось,
    // выводим код ошибки
    if(lpFileMap == 0)
    {
        MessageBoxA(0,"MapViewOfFile: Error!",0,MB_OK | MB_ICONERROR | MB_SYSTEMMODAL);
//      fprintf(stdout,"MapViewOfFile: Error %ld\n", 
//          GetLastError());
//      _getch();
        return;
    }
}
 
 
CBotClient::~CBotClient(void)
{
}
 
 
 
static unsigned _stdcall ServerConnect(LPVOID Parm)
{
    if (Parm)
    {
        SESION_PARM * cl = (SESION_PARM*)(Parm);
 
        if (cl)
        {
            DWORD dwRetCode = 0;
            CBotClient * Serv      = (CBotClient*)(cl->Class);
            pRecvMem     _pRecvMem = (pRecvMem)(cl->Echo);
 
 
            // Цикл ввода. Этот цикл завершает свою работу,
            // когда пользователь нажимает клавишу <ESC>, 
            // имеющую код 27
            while(TRUE)
            {
                _pRecvMem(Serv->lpFileMap);
                SetEvent(Serv->hEvent);
                Sleep(200);
            }
 
            // После завершения цикла переключаем оба события
            // в отмеченное состояние для отмены ожидания в
            // процессе отображения и для завершения этого процесса
            SetEvent(Serv->hEvent);
            SetEvent(Serv->hEventTermination);
 
            // Закрываем идентификаторы объектов-событий
            CloseHandle(Serv->hEvent);
            CloseHandle(Serv->hEventTermination);
 
            // Отменяем отображение файла
            UnmapViewOfFile(Serv->lpFileMap);
 
            // Освобождаем идентификатор созданного
            // объекта-отображения
            CloseHandle(Serv->hFileMapping);
        }
 
    }
 
    return 0;
}
 
 
BOOL CBotClient::StartSesion(LPVOID FuncEcho)
{
    SESION_PARM * sesion = new SESION_PARM;
    sesion->Class = (LPVOID)this;
    sesion->Echo  = FuncEcho;
 
    //return (_beginthreadex(0,0,ServerConnect,sesion,0,0) != NULL);
    return (CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ServerConnect, sesion, NULL, NULL)!= NULL);
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.786 из 5