procedure TForm1.Timer2Timer(Sender: TObject);
var
Gameh:HWND; //ub:string;
shu:string;
begin
tempa:=gold;
//tempb:=RzEdit1.text;
shu:=RzEdit1.Text;
//ub:=IntToStr(tempa);
//shu:='700';
Gameh:=FindWindow(nil,'Caption');
if tempa > StrToInt(shu) then
begin if ctcheck = 0 then
begin
PostMessage(Gameh,Messages.WM_LBUTTONDOWN,0,$01ca0180);
PostMessage(Gameh,Messages.WM_LBUTTONUP,0,$01ca0180);
ctcheck:=1;
Sleep(300);
end
else
begin
PostMessage(Gameh,Messages.WM_LBUTTONDOWN,0,$024802ae);
PostMessage(Gameh,Messages.WM_LBUTTONUP,0,$024802ae);
ctcheck:=0;
Sleep(300);
end;
end
else
begin
SendMessage(Gameh,WM_CLOSE,0,0); //关闭进程;
end;
end;以上代码运行起来是可以成功完成定时操作.timer2控件时间设的是1000毫秒执行一次.设大了达不到速度要求.有什么办法达到同样的速度,程序运行起来也不卡呢?本人初学编程,请指教,在此谢谢各位达人
var
Gameh:HWND; //ub:string;
shu:string;
begin
tempa:=gold;
//tempb:=RzEdit1.text;
shu:=RzEdit1.Text;
//ub:=IntToStr(tempa);
//shu:='700';
Gameh:=FindWindow(nil,'Caption');
if tempa > StrToInt(shu) then
begin if ctcheck = 0 then
begin
PostMessage(Gameh,Messages.WM_LBUTTONDOWN,0,$01ca0180);
PostMessage(Gameh,Messages.WM_LBUTTONUP,0,$01ca0180);
ctcheck:=1;
Sleep(300);
end
else
begin
PostMessage(Gameh,Messages.WM_LBUTTONDOWN,0,$024802ae);
PostMessage(Gameh,Messages.WM_LBUTTONUP,0,$024802ae);
ctcheck:=0;
Sleep(300);
end;
end
else
begin
SendMessage(Gameh,WM_CLOSE,0,0); //关闭进程;
end;
end;以上代码运行起来是可以成功完成定时操作.timer2控件时间设的是1000毫秒执行一次.设大了达不到速度要求.有什么办法达到同样的速度,程序运行起来也不卡呢?本人初学编程,请指教,在此谢谢各位达人
个人感觉发送完按键信息后目标窗体被执行后并没有反馈结果.这个结果没有的话就没有什么中断条件.所以程序本身会不断的发送执行sendmessage这样就造成了卡的问题.关键是找不到什么中断的条件.所以只能定时了
你把这些操作放到线程去处理
线程函数
While not terminte do
begin
Sleep(Timer2Timer的时间)
Timer2Timer的代码
end;
我现在就去试试.我其它的都是放在线程函数里的.只不过添加了一个窗体介面.我的函数DLL是注入在sendmessage目标进程里的.这个对程序运行速度上没影响吧?
我是初学者,请多指教一下.谢谢你的帮助.
Terminated
procedure TForm1.Timer2Timer(Sender: TObject);
var
Gameh:HWND;
shu:string;
begin
tempa:=gold;//这里的GOLD来源函数单元function gold():Integer;的返回值
shu:=RzEdit1.Text;//这里将输入的值放进变量shu里与进程里的tempa对比值
Gameh:=FindWindow(nil,'Caption');//查找Caption窗口的句柄
if tempa > StrToInt(shu) then
begin if ctcheck = 0 then //这里的CTCHECK值由BUTTON事件赋值为0或1 并将timer事件打开.
begin
PostMessage(Gameh,Messages.WM_LBUTTONDOWN,0,$01ca0180);
PostMessage(Gameh,Messages.WM_LBUTTONUP,0,$01ca0180);
ctcheck:=1;
Sleep(300);
end
else
begin
PostMessage(Gameh,Messages.WM_LBUTTONDOWN,0,$024802ae);
PostMessage(Gameh,Messages.WM_LBUTTONUP,0,$024802ae);
ctcheck:=0;
Sleep(300);
end;
end
else
begin
SendMessage(Gameh,WM_CLOSE,0,0); //关闭进程;
end;
end;
=====================
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Edit2: TEdit;
Button2: TButton;
Timer1: TTimer;
Button3: TButton;
Timer2: TTimer;
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementationuses unit2;{$R *.dfm}var
hThread:THandle;
num:Integer;{线程入口函数}
function MyThreadFun(p: Pointer): Integer; stdcall;
begin
while True do {假如线程不挂起, 这个循环将一直循环下去}
begin
num := Random(100);
end;
Result := 0;
end; procedure TForm1.Timer1Timer(Sender: TObject);
begin
edit1.text:=inttostr(num);
end;{建立并挂起线程}
procedure TForm1.Button1Click(Sender: TObject);
var
ID:DWORD;
begin
hThread := CreateThread(nil, 0, @MyThreadFun, nil, CREATE_SUSPENDED, ID);
end;{唤醒并继续线程}
procedure TForm1.Button2Click(Sender: TObject);
begin
ResumeThread(hThread);
end;{挂起线程}
procedure TForm1.Button3Click(Sender: TObject);
begin
SuspendThread(hThread);
end;procedure TForm1.Timer2Timer(Sender: TObject);
begin
edit2.Text:=inttostr(strtoint(edit2.Text)+1);
end;end.