Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program WinMineTrainer;
- uses windows,sysutils,strutils,wincrt,crt;
- const
- //Address
- addNumRow= $010056A8;
- addNumCol= $010056AC;
- addNumFlagLeft= $01005194;
- addNumBomb= $01005330;
- addTimer= $0100579C;
- //Array Flag
- isSafe= $F;
- isBomb= $8F;
- isOpen= $40;
- is1bomb= $41;
- is2bomb= $42;
- is3bomb= $43;
- is4bomb= $44;
- is5bomb= $45;
- is6bomb= $46;
- is7bomb= $47;
- is8bomb= $48;
- isFlag= $8E;
- unKnown= $8D;
- isExploded=$CC;
- isRevealed=$8A;
- function readBYTE(address:DWORD):BYTE;
- var
- value: BYTE;
- pid:DWORD;
- handle,phandle: THandle;
- ByteRead: DWORD;
- begin
- value:= 0; //Result will go here
- handle:= FindWindow(Nil, 'Minesweeper');
- if (handle=0) then
- writeln('Window not found!')
- else
- begin
- GetWindowThreadProcessId(handle, @pid);
- phandle:=OpenProcess(PROCESS_VM_READ, false, pid); //Tao handle va Xin phep quyen Doc
- if (phandle=0) then //Unsuccess
- writeln('Could not get handle!')
- else
- ReadProcessMemory(phandle,Pointer(PtrUInt(Address)) , @value, sizeof(byte), ByteRead);
- end;
- readByte:=value;
- end;
- function readDWORD(address:DWORD):DWORD;
- var
- value: DWORD;
- pid:DWORD;
- handle,phandle: THandle;
- ByteRead: DWORD;
- begin
- value:= 0; //Result will go here
- handle:= FindWindow(Nil, 'Minesweeper');
- if (handle=0) then
- writeln('Window not found!')
- else
- begin
- GetWindowThreadProcessId(handle, @pid);
- phandle:=OpenProcess(PROCESS_VM_READ, false, pid); //Tao handle va Xin phep quyen Doc
- if (phandle=0) then //Unsuccess
- begin
- writeln('Could not get handle!');
- readln;
- end
- else
- ReadProcessMemory(phandle,Pointer(PtrUInt(Address)) , @value, sizeof(DWORD), ByteRead);
- end;
- readDWORD:=value;
- end;
- function getAdressOfXY(row:DWORD; col:DWORD ):DWORD;
- begin
- result:=(row shl 5) + col + $1005340;
- end;
- var
- numRow:DWORD;
- numCol:DWORD;
- numFlagLeft:DWORD;
- numBomb:DWORD;
- timer:DWORD;
- res: BYTE;
- r,c:DWORD;
- begin
- HighVideo;
- while not keypressed do
- begin
- numRow:= readDWORD(addNumRow);
- numCol:= readDWORD(addNumCol);
- numFlagLeft:= readDWORD(addNumFlagLeft);
- numBomb:= readDWORD(addNumBomb);
- timer:= readDWORD(addTimer);
- writeln('Row: ',numRow,' Col: ',numCol,' Bomb: ',numBomb,' Flag Left: ',numFlagLeft,' Time: ',timer);
- for r := 1 to numRow do
- begin
- for c:= 1 to numCol do
- begin
- res:=readBYTE(getAdressOfXY(r,c));
- case res of
- isSafe:write('. ');
- isBomb:
- begin
- textcolor(12);
- write('* ');
- textcolor(15);
- end;
- isOpen:write(' ');
- is1bomb:write('1 ');
- is2bomb:write('2 ');
- is3bomb:write('3 ');
- is4bomb:write('4 ');
- is5bomb:write('5 ');
- is6bomb:write('6 ');
- is7bomb:write('7 ');
- is8bomb:write('8 ');
- isFlag:
- begin
- textcolor(10);
- write('F ');
- textcolor(15);
- end;
- isExploded:
- begin
- textcolor(14);
- write('* ');
- textcolor(15);
- end;
- isRevealed:
- begin
- textcolor(12);
- write('* ');
- textcolor(15);
- end;
- else write('? ');
- end;
- end;
- writeln;
- end;
- delay(1000);
- clrscr;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement