Принцип бота - 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); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д