Bases du plug-in C/C Win98 pour le dragueur de mines
Jan 22, 2017 pm 02:16 PMCette fois, nous utilisons le champ "avancé" du dragueur de mines win98 comme exemple de code de base. Plus tard, nous écrirons un code commun pour tous les champs
Le champ du dragueur de mines "avancé" fait référence à
4. Après avoir suivi, nous sommes ici Les données de l'échiquier peuvent être trouvées sur
Les données pour extraire la position actuelle sont les suivantes :
On connaît les deux premiers mots de l'adresse 010055330. Il s'agit de 0x63 (99 en décimal), qui représente le nombre de tonnerre. Les doubles mots suivants sont respectivement la largeur et la hauteur 0x10 qui représentent le bord de l'échiquier. . 0x8F représente le tonnerre
Il suffit donc de récupérer cette mémoire 0x8F et de la changer en 0x8E (marquée par un drapeau rouge), c'est réussi
comme indiqué ci-dessous
.
Ce qui suit est le code C/C
#include <windows.h> #include <stdio.h> int main() { HWND hWinmine = FindWindow(NULL, L"扫雷"); DWORD dwPID = 0; GetWindowThreadProcessId(hWinmine, &dwPID); HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, dwPID); //基础地址、雷数、宽度、高度 DWORD dwBaseAddr = 0x01005330; DWORD dwNum = 0, dwWidth = 0, dwHight = 0, dwSize = 0; //读取内存信息 //读进程的内存空间数据 //参数:第1个参数: HANDLE hProcess进程句柄。 //第2个参数: LPCVOID lpBaseAddress基址指针。 //第3个参数: LPVOID lpBuffer接收数据缓冲区指针。 //第4个参数: DWORD nSize接收数据缓冲区缓冲区大小。 //第5个参数: LPDWORD lpNumberOfBytesRead读入数据量大小指针。 返回值: 成功:TRUE 失败:FALSE ReadProcessMemory(hProcess, (LPVOID)dwBaseAddr, &dwNum, sizeof(DWORD), &dwSize); ReadProcessMemory(hProcess, (LPVOID)(dwBaseAddr +0x4), &dwWidth, sizeof(DWORD), &dwSize); ReadProcessMemory(hProcess, (LPVOID)(dwBaseAddr + 0x8), &dwHight, sizeof(DWORD), &dwSize); //棋盘总大小=棋盘+空白边+4角 DWORD dwReadsize = dwWidth*dwHight + dwHight * 2 + dwWidth * 2 + 4; PBYTE pByte = new BYTE[dwReadsize]; ReadProcessMemory(hProcess, (LPVOID)(dwBaseAddr + 0x16), pByte, dwReadsize, &dwSize); BYTE bClear = 0x8E; for (size_t i = 0; i < dwReadsize; i++) { if (pByte[i] == 0x8F) { WriteProcessMemory(hProcess, (LPVOID)(dwBaseAddr + 0x16 + i), &bClear, sizeof(BYTE), &dwSize); } } //函数功能: 得到窗体客户区的大小。 //第1个参数: HWND hWnd窗体句柄。 //第2个参数: LPRECT lpRect客户区RECT结构的指针。 RECT rt = { 0 }; GetClientRect(hWinmine, &rt); InvalidateRect(hWinmine, &rt, true);//这个函数屏蔽一个窗口客户区的全部或部分区域。这会导致窗口在事件期间部分重画 delete pByte; CloseHandle(hProcess); getchar(); return 0; }

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Quelles sont les différences entre php et c#

Pourquoi en C/C++, la taille de la structure n'est pas égale à la somme des tailles de chaque membre ?
![Un article explique en détail la configuration de vscode, l'environnement d'exécution C/C++ [enseignement au niveau nounou]](https://img.php.cn/upload/article/000/000/024/63fc94eb8852a975.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
Un article explique en détail la configuration de vscode, l'environnement d'exécution C/C++ [enseignement au niveau nounou]

Créer un outil de formatage de code C/C++ à l'aide de l'outil Clang

En C/C++, il existe deux opérations : le pré-incrémentation et le post-incrémentation.

En C/C++, la fonction strcpy() est une fonction utilisée pour copier une chaîne dans une autre chaîne

Configuration recommandée pour la programmation C/C++ à l'aide de Sublime Text sous Linux

Programme C/C++ pour calculer le nombre de zéros à droite dans la factorielle d'un nombre
