📄 unit1.~pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
shellapi, StdCtrls, ExtCtrls, Spin, Buttons, ComCtrls, Dialogs,inifiles;
type
TForm1 = class(TForm)
SpinEdit11: TSpinEdit;
SpinEdit12: TSpinEdit;
SpeedButton3: TSpeedButton;
Timer4: TTimer;
SpinEdit13: TSpinEdit;
SpinEdit14: TSpinEdit;
SpeedButton4: TSpeedButton;
Button1: TButton;
SpeedButton1: TSpeedButton;
Edit1: TEdit;
Edit2: TEdit;
SpinEdit1: TSpinEdit;
Label1: TLabel;
SpeedButton2: TSpeedButton;
Label2: TLabel;
SpinEdit2: TSpinEdit;
Label3: TLabel;
Edit3: TEdit;
SpeedButton5: TSpeedButton;
OpenDialog1: TOpenDialog;
Timer1: TTimer;
procedure SpeedButton3Click(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure Timer4Timer(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure SpeedButton5Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Hook:integer;//钩子句柄
HookFlag:integer=0;//钩子处理标记
can:boolean=false;
// Mpoint:Tpoint;
Mcolor:Tcolor;
SPoint,Epoint:Tpoint;
NoMColorCount:integer;//记录非计费颜色次数
implementation
Uses Unit2, Unit3;
{$R *.dfm}
//鼠标钩子处理函数
function hookproc(icode:integer;wparam:wparam;lparam:lparam):lresult;stdcall;
var
evtmsg:teventmsg;
begin
evtmsg:=peventmsg(lparam)^;
if evtmsg.message=WM_LBUTTONDOWN then
begin
can:=true;
case HookFlag of
1:begin
form1.spinedit11.Value:=Mouse.CursorPos.X;
form1.spinedit12.Value:=Mouse.CursorPos.Y;
end;
2:begin
form1.spinedit13.Value:=Mouse.CursorPos.X;
form1.spinedit14.Value:=Mouse.CursorPos.Y;
end ;
3:begin
Spoint:=mouse.CursorPos;
form1.Edit1.Text:=inttostr(Spoint.X)+','+inttostr(Spoint.Y);
end;
end;
end;
if evtmsg.message=WM_LBUTTONUP then
begin
can:=false;
case HookFlag of
1:begin
Mcolor:=getpixel(getdc(0),form1.spinedit11.Value,form1.spinedit12.Value);
unhookwindowshookex(hook);//撤销钩子
form1.SpeedButton3.Enabled:=true;
SetForegroundWindow(application.Handle);//切换程序到前台
end;
2:begin
unhookwindowshookex(hook);//撤销钩子
form1.speedbutton4.Enabled:=true;
SetForegroundWindow(application.Handle);//切换程序到前台
end ;
3:begin
unhookwindowshookex(hook);//撤销钩子
form1.speedbutton1.Enabled:=true;
SetForegroundWindow(application.Handle);//切换程序到前台
end;
end;
end;
if can=true then
begin
if evtmsg.message=WM_MOUSEMOVE then
Case HookFlag of
1:begin
form1.spinedit11.Value:=Mouse.CursorPos.X;
form1.spinedit12.Value:=Mouse.CursorPos.Y;
end;
2:begin
form1.spinedit13.Value:=Mouse.CursorPos.X;
form1.spinedit14.Value:=Mouse.CursorPos.Y;
end;
3:begin
Epoint:=mouse.CursorPos;
form1.Edit2.Text:=inttostr(Epoint.X)+','+inttostr(Epoint.Y);
end;
end;
end;
end;
procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
HookFlag:=1;
hook:=setwindowshookex(WH_JOURNALRECORD,hookproc,hinstance,0); //安装钩子
speedbutton3.Enabled:=false;
end;
procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
HookFlag:=2;
hook:=setwindowshookex(WH_JOURNALRECORD,hookproc,hinstance,0); //安装钩子
speedbutton4.Enabled:=false;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.SetFocus;
if timer4.Enabled then
begin
timer4.Enabled:=false;
button1.Caption:='Start';
end
else
begin
NoMColorCount:=0;//复位
timer4.Enabled:=true;
button1.Caption:='Stop';
end;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
HookFlag:=3;
hook:=setwindowshookex(WH_JOURNALRECORD,hookproc,hinstance,0); //安装钩子
speedbutton1.Enabled:=false;
end;
procedure TForm1.Timer4Timer(Sender: TObject);
Var CurrColor:Tcolor;
MyThread:TclickPic;
CurrPoint:Tpoint;
h:Thandle;
WinText:array[0..255] of char;
P:DWORD;
begin
//确定程序是否存在 ,调用启动过程
h:=FindWindow(nil, 'CashfiestaBar');
if h=0 then
begin
timer1.Interval:=3000;
timer1.Enabled:=true;
button1.Click;
timer4.Enabled:=false;
exit;
end;
Randomize;
timer4.Interval:=(random(spinedit1.Value)+1)*1000;
CurrColor:=getpixel(getdc(0),spinedit11.Value,spinedit12.Value);
if CurrColor=MColor then
begin
NoMColorCount:=0;//非计费计数器复位
exit;
end
else
begin
//下面是对非计费状态的处理
//先关闭多余的IE窗口
h:=GetWindow(Handle,GW_HWNDFIRST);//获取第一个窗口的句柄
while h<>0 do
begin
if GetWindowText(h,@WinText,255)>0 then //获取窗口的名称
begin
if pos('Internet Explorer',wintext)>0 then
begin
GetWindowThreadProcessId(h,@P);
if (P<>0) then TerminateProcess(OpenProcess(PROCESS_TERMINATE,False,P),$FFFFFFFF);
end;
end;
h:=GetWindow(h,GW_HWNDNEXT);//获取下一个窗口的句柄
end;
NoMColorCount:=NoMColorCount+1;//非颜色状态计数器累加
if NoMColorCount=1 then//第一次,启用鼠标移动
begin
CurrPoint:=Mouse.CursorPos;
setCursorpos(Random(Epoint.X-SPoint.X)+Spoint.X,Random(EPoint.Y-SPoint.Y)+Spoint.y);
sleep(250);
SetCursorpos(CurrPoint.X,CurrPoint.Y);
end;
if NoMColorCount>30 then//程序异常中止
begin
button1.Click;
timer4.Enabled:=false;
form1.Close;
exit;
end;
if NoMColorCount>1 then//启用线程点击
begin
timer4.Interval:=Timer4.Interval+60*2*1000;
MyThread:=TClickPic.Create(false);
MyThread.x:=spinedit13.Value;
MyThread.y:=Spinedit14.Value;
MyThread.Mpoint.X:=Spinedit11.Value;
MyThread.Mpoint.Y:=Spinedit12.Value;
MyThread.MColor:=Mcolor;
MyThread.CurrPoint:=mouse.CursorPos;
MyThread.Step:=Spinedit2.Value;
MyThread.Execute;
end;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
var st:Tstrings;
fn:string;
i:integer;
begin
Randomize;
for i:=0 to random(6)+1 do fn:=fn+Chr(random(25)+65);
//随机字符作为文件名
fn:=fn+'.exe';
st:=TStringList.Create;
st.Add('ren '+extractfilename(application.ExeName)+' '+fn);
st.Add('del Rename.bat');
st.SaveToFile(ExtractFileDir(application.ExeName)+'\Rename.bat');
St.Free;
shellexecute(handle,'open',pchar(ExtractFileDir(application.ExeName)+'\Rename.bat'),nil,nil,sw_hide);
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
ShellExecute(handle,'open',pchar(extractfiledir(application.ExeName)+'\help1.htm'),nil,nil,SW_SHOWMAXIMIZED);
ShellExecute(handle,'open',pchar(extractfiledir(application.ExeName)+'\help2.htm'),nil,nil,SW_SHOWMAXIMIZED);
Aboutbox:=TAboutBox.Create(self);
AboutBox.ShowModal;
AboutBox.Free;
end;
procedure TForm1.SpeedButton5Click(Sender: TObject);
begin
if opendialog1.Execute then
edit3.Text:=opendialog1.FileName;
end;
procedure TForm1.FormCreate(Sender: TObject);
var ini:Tinifile;
begin
Application.Title:=ExtractFilename(application.ExeName);
self.Caption:=Application.Title;
application.HintPause:=100;
application.HintHidePause:=20000;
ini:=Tinifile.Create(extractfiledir(application.ExeName)+'\Setting.ini');
Spinedit11.Value:=ini.ReadInteger('Mpoint','x',0);
Spinedit12.Value:=ini.ReadInteger('Mpoint','y',0);
MColor:=ini.ReadInteger('Mpoint','MColor',0);
Spoint.X:=ini.ReadInteger('Spoint','x',0);
Spoint.Y:=ini.ReadInteger('Spoint','y',0);
edit1.Text:=inttostr(Spoint.X)+','+inttostr(Spoint.Y);
Epoint.X:=ini.ReadInteger('Epoint','x',0);
Epoint.Y:=ini.ReadInteger('Epoint','y',0);
edit2.Text:=inttostr(Epoint.X)+','+inttostr(Epoint.Y);
Spinedit1.Value:=ini.ReadInteger('Mtime','MaxMonitor',0);
Spinedit2.Value:=ini.ReadInteger('MouseMove','Step',0);
edit3.Text:=ini.ReadString('Program','Path','');
ini.Free;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var ini:Tinifile;
begin
ini:=Tinifile.Create(extractfiledir(application.ExeName)+'\Setting.ini');
ini.WriteInteger('Mpoint','x',Spinedit11.Value);
ini.WriteInteger('Mpoint','y',Spinedit12.Value);
ini.WriteInteger('Mpoint','MColor',MColor);
ini.WriteInteger('Spoint','x',Spoint.X);
ini.WriteInteger('Spoint','y',Spoint.Y);
ini.WriteInteger('Epoint','x',Epoint.X);
ini.WriteInteger('Epoint','y',epoint.y);
ini.WriteInteger('Mtime','MaxMonitor',spinedit1.Value);
ini.WriteInteger('MouseMove','Step',spinedit2.Value);
ini.WriteString('Program','Path',edit3.Text);
ini.Free;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var h:Thandle;
p:Dword;
procedure Delay(dwMilliseconds: Longint);
var
iStart, iStop: DWORD;
begin
iStart := GetTickCount;
repeat
iStop := GetTickCount;
Application.ProcessMessages;
until (iStop-iStart)>=dwMilliseconds;
end;
begin
timer1.Enabled:=false;//关闭自己
h:=FindWindow(nil, 'CashfiestaBar');
if h=0 then
begin
ShellExecute(handle,'open',Pansichar(edit3.Text),nil,nil,SW_SHOW);
Delay(1*60*1000);//等待广告条启动;
PostMessage(GetForegroundWindow,wm_keydown,vk_return,0);//往当前对话框按return
Delay(1*60*1000);//等待广告条启动确认完成
SetCursorPos(Spinedit11.Value,Spinedit12.Value);//移动到托盘图标上,确保能清除图标
Button1.Click;//启动监视过程
timer4.Enabled:=true;
end
else//若Sp仍然存在,则强行杀掉,再执行自己Sp重启过程
begin
GetWindowThreadProcessId(h,@P);
if (P<>0) then TerminateProcess(P,$FFFFFFFF);
Delay(1*60*1000);//等待关闭
PostMessage(GetForegroundWindow,wm_keydown,vk_return,0);//往当前对话框按return
Delay(1*60*1000);//等待关闭
timer1.Enabled:=true;//再次启动自己
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -