Advertisement
finalshare

WinMineTrainer.pas

Mar 17th, 2017
266
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 3.35 KB | None | 0 0
  1. program WinMineTrainer;
  2.  
  3. uses windows,sysutils,strutils,wincrt,crt;
  4.  
  5. const
  6.  
  7.     //Address
  8.         addNumRow=      $010056A8;
  9.         addNumCol=      $010056AC;
  10.         addNumFlagLeft= $01005194;
  11.         addNumBomb=     $01005330;
  12.         addTimer=       $0100579C;
  13.  
  14.     //Array Flag
  15.         isSafe=    $F;
  16.         isBomb=    $8F;
  17.         isOpen=    $40;
  18.         is1bomb=   $41;
  19.         is2bomb=   $42;
  20.         is3bomb=   $43;
  21.         is4bomb=   $44;
  22.         is5bomb=   $45;
  23.         is6bomb=   $46;
  24.         is7bomb=   $47;
  25.         is8bomb=   $48;
  26.         isFlag=    $8E;
  27.         unKnown=   $8D;
  28.         isExploded=$CC;
  29.         isRevealed=$8A;
  30.  
  31. function readBYTE(address:DWORD):BYTE;
  32. var
  33.     value: BYTE;
  34.     pid:DWORD;
  35.     handle,phandle: THandle;
  36.     ByteRead: DWORD;
  37. begin
  38.     value:= 0; //Result will go here
  39.     handle:= FindWindow(Nil, 'Minesweeper');
  40.     if (handle=0) then
  41.         writeln('Window not found!')
  42.     else
  43.         begin
  44.             GetWindowThreadProcessId(handle, @pid);
  45.             phandle:=OpenProcess(PROCESS_VM_READ, false, pid); //Tao handle va Xin phep quyen Doc
  46.             if (phandle=0) then //Unsuccess
  47.                 writeln('Could not get handle!')
  48.             else
  49.                 ReadProcessMemory(phandle,Pointer(PtrUInt(Address)) , @value, sizeof(byte), ByteRead);
  50.         end;
  51.     readByte:=value;
  52. end;
  53.  
  54. function readDWORD(address:DWORD):DWORD;
  55. var
  56.     value: DWORD;
  57.     pid:DWORD;
  58.     handle,phandle: THandle;
  59.     ByteRead: DWORD;
  60. begin
  61.     value:= 0; //Result will go here
  62.     handle:= FindWindow(Nil, 'Minesweeper');
  63.     if (handle=0) then
  64.         writeln('Window not found!')
  65.     else
  66.     begin
  67.         GetWindowThreadProcessId(handle, @pid);
  68.         phandle:=OpenProcess(PROCESS_VM_READ, false, pid); //Tao handle va Xin phep quyen Doc
  69.         if (phandle=0) then //Unsuccess
  70.             begin
  71.                 writeln('Could not get handle!');
  72.                 readln;
  73.             end
  74.         else
  75.             ReadProcessMemory(phandle,Pointer(PtrUInt(Address)) , @value, sizeof(DWORD), ByteRead);
  76.     end;
  77.     readDWORD:=value;
  78. end;
  79.  
  80. function getAdressOfXY(row:DWORD; col:DWORD ):DWORD;
  81. begin
  82.     result:=(row shl 5) + col + $1005340;
  83. end;
  84.  
  85. var
  86.     numRow:DWORD;
  87.     numCol:DWORD;
  88.     numFlagLeft:DWORD;
  89.     numBomb:DWORD;
  90.     timer:DWORD;
  91.     res: BYTE;
  92.     r,c:DWORD;
  93. begin
  94.     HighVideo;
  95.     while not keypressed do
  96.         begin
  97.             numRow:= readDWORD(addNumRow);
  98.             numCol:= readDWORD(addNumCol);
  99.             numFlagLeft:= readDWORD(addNumFlagLeft);
  100.             numBomb:= readDWORD(addNumBomb);
  101.             timer:= readDWORD(addTimer);
  102.             writeln('Row: ',numRow,' Col: ',numCol,' Bomb: ',numBomb,' Flag Left: ',numFlagLeft,' Time: ',timer);
  103.             for r := 1 to numRow do
  104.                 begin
  105.                 for c:= 1 to numCol do
  106.                     begin
  107.                         res:=readBYTE(getAdressOfXY(r,c));
  108.                         case res of
  109.                             isSafe:write('. ');
  110.                             isBomb:
  111.                                 begin
  112.                                     textcolor(12);
  113.                                     write('* ');
  114.                                     textcolor(15);
  115.                                 end;
  116.                                 isOpen:write('  ');
  117.                                 is1bomb:write('1 ');
  118.                                 is2bomb:write('2 ');
  119.                                 is3bomb:write('3 ');
  120.                                 is4bomb:write('4 ');
  121.                                 is5bomb:write('5 ');
  122.                                 is6bomb:write('6 ');
  123.                                 is7bomb:write('7 ');
  124.                                 is8bomb:write('8 ');
  125.                                 isFlag:
  126.                                     begin
  127.                                         textcolor(10);
  128.                                         write('F ');
  129.                                         textcolor(15);
  130.                                     end;
  131.                                 isExploded:
  132.                                     begin
  133.                                         textcolor(14);
  134.                                         write('* ');
  135.                                         textcolor(15);
  136.                                     end;
  137.                                 isRevealed:
  138.                                     begin
  139.                                         textcolor(12);
  140.                                         write('* ');
  141.                                         textcolor(15);
  142.                                     end;
  143.                                 else write('? ');
  144.                         end;
  145.  
  146.                     end;
  147.                 writeln;
  148.             end;
  149.             delay(1000);
  150.             clrscr;
  151.     end;
  152. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement