📄 unit1.pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure AutoSweap2000;
const
MinesAddress = $010052C4;
WidthAddress = $010052C8;
HeightAddress = $010052CC;
CellBaseAddress = $01005720;
yOffset = 62;
xOffset = 19;
var
hProcess: THandle;
hDestWnd: HWND;
dwProcessID: Cardinal;
dummy: DWORD;
m_width, m_height, m_mineNum: Integer;
bValue: Byte;
row, col: Integer;
address: Pointer;
begin
hDestWnd := FindWindow(nil, '扫雷');
if hDestWnd = 0 then
begin
ShowMessage('没发现扫雷程序。');
Exit;
end;
GetWindowThreadProcessId(hDestWnd, dwProcessID);
hProcess := OpenProcess(PROCESS_VM_READ or PROCESS_VM_WRITE or
PROCESS_VM_OPERATION or PROCESS_QUERY_INFORMATION, False, dwProcessID);
ReadProcessMemory(hProcess, Pointer(MinesAddress), @m_mineNum, sizeof(m_mineNum), dummy);
ReadProcessMemory(hProcess, Pointer(WidthAddress), @m_width, sizeof(m_width), dummy);
ReadProcessMemory(hProcess, Pointer(HeightAddress), @m_height, sizeof(m_height), dummy);
//ShowMessage(Format('雷数:%d, 宽度:%d, 高度:%d', [m_mineNum,m_width,m_height]));
BringWindowToTop(hDestWnd);
SetForegroundWindow(hDestWnd);
Windows.SetFocus(hDestWnd);
for row := 0 to m_width - 1 do
begin
for col := 0 to m_height - 1 do
begin
bValue := $0F;
address := Pointer(CellBaseAddress + 32*row+col+1);
ReadProcessMemory(hProcess, address, @bValue, sizeof(bValue), dummy);
if bValue <> $8F then
begin
SendMessage(hDestWnd, WM_LBUTTONDOWN, 0, MakeLParam(xOffset+16*col,yOffset+16*row));
SendMessage(hDestWnd, WM_LBUTTONUP, 0, MakeLParam(xOffset+16*col,yOffset+16*row));
end;
end;
end;
CloseHandle(hProcess);
end;
procedure AutoSweapXP;
const
MinesAddress = $01005330;
WidthAddress = $01005334;
HeightAddress = $01005338;
CellBaseAddress = $01005340;
yOffset = 70;
xOffset = 20;
var
hProcess: THandle;
hDestWnd: HWND;
dwProcessID: Cardinal;
dummy: DWORD;
m_width, m_height, m_mineNum: Integer;
bValue: Byte;
row, col: Integer;
address: Pointer;
begin
hDestWnd := FindWindow(nil, '扫雷');
if hDestWnd = 0 then
begin
ShowMessage('没发现扫雷程序。');
Exit;
end;
GetWindowThreadProcessId(hDestWnd, dwProcessID);
hProcess := OpenProcess(PROCESS_VM_READ or PROCESS_VM_WRITE or
PROCESS_VM_OPERATION or PROCESS_QUERY_INFORMATION, False, dwProcessID);
ReadProcessMemory(hProcess, Pointer(MinesAddress), @m_mineNum, sizeof(m_mineNum), dummy);
ReadProcessMemory(hProcess, Pointer(WidthAddress), @m_width, sizeof(m_width), dummy);
ReadProcessMemory(hProcess, Pointer(HeightAddress), @m_height, sizeof(m_height), dummy);
//ShowMessage(Format('雷数:%d, 宽度:%d, 高度:%d', [m_mineNum,m_width,m_height]));
BringWindowToTop(hDestWnd);
SetForegroundWindow(hDestWnd);
Windows.SetFocus(hDestWnd);
for col := 0 to m_height - 1 do
begin
for row := 0 to m_width - 1 do
begin
bValue := $0F;
address := Pointer(CellBaseAddress + row+1+32*(col+1));
ReadProcessMemory(hProcess, address, @bValue, sizeof(bValue), dummy);
if bValue <> $8F then
begin
SendMessage(hDestWnd, WM_LBUTTONDOWN, 0, MakeLParam(xOffset+16*row,yOffset+16*col));
SendMessage(hDestWnd, WM_LBUTTONUP, 0, MakeLParam(xOffset+16*row,yOffset+16*col));
end;
end;
end;
CloseHandle(hProcess);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
AutoSweap2000;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
AutoSweapXP;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -