kTool.FormCreate(Sender: TObject);
begin
init();
end;
{初始化
程序.}
procedure TfrmLinkTool.init;
begin //
AppPath:= ExtractFilePath(Application.ExeName); //程序运行环境
DicPath:= AppPath+ '\img\DIC'; //字典图片虽在位置
RegHotKey; //
注册热键
GetDICBmps(dicPath); //加载字典图片数组DicBmps
SetWindPos(HWND_TOPMOST); //游戏窗体置前
end;
{windows api 设置游戏窗体最前}
function TfrmLinkTool.SetWindPos(HWND_TOPMOST:LongWord): Boolean;
var
h:THandle;
begin //
Result:= False;
h:= Findwindow(nil,'QQ游戏 - 连连看角色版');
if h<> 0 then
begin
ShowWindow(h,SW_SHOWNORMAL);
if SetWindowPos(h, HWND_TOPMOST, 0,0, WINDWIDTH, WINDHEIGHT, SWP_NOSIZE) then
Result:= True;
end;
self.Update;
end;
{抓去屏幕图片,截取出游戏的窗体.}
function TfrmLinkTool.GetWindowBMP: TBitmap;
var
WinBMP:TBitmap;
FullscreenCanvas : TCanvas;
DC : HDC;
begin
WinBMP:=TBitmap.Create;//创建一个BITMAP来存放图象
WinBMP.Width := WINDWIDTH;
WinBMP.Height := WINDHEIGHT;
DC:=GetDC(0);//取得屏幕的DC,参数0指的是屏幕
FullscreenCanvas := TCanvas.Create;//创建一个CANVAS对象
try
FullscreenCanvas.Handle := DC;
WinBMP.Canvas.CopyRect
(Rect(0,0,WINDWIDTH,WINDHEIGHT),FullScreenCanvas,
Rect(0,0,WINDWIDTH,WINDHEIGHT));
//把整个屏幕复制到BITMAP中
finally
FullScreenCanvas.Free;//释放CANVAS对象
ReleaseDC(0,DC);//释放DC
end;
//WinBMP.LoadFromFile('C:\temp\w1.BMP');
Result:= WinBMP;
end;
{根据图片的X,Y坐标获得图片.}
function TfrmLinkTool.GetOneBMP(x, y: Integer): TBitmap;
var
bmp:TBitmap;
begin //
bmp:= TBitmap.Create;
bmp.Width:= SIGNWIDTH;
bmp.Height:= SIGNHEIGHT; //STARTLEFT+ SIGNWIDTH* x,STARTTOP+ SIGNHEIGHT* y
b
mp.Canvas.CopyRect(Rect(0,0,SIGNWIDTH,SIGNHEIGHT),Fullscreen.Canvas,
Rect(STARTLEFT+ x* SIGNWIDTHEX- 1,STARTTOP+ y* SIGNHEIGHTEX- 1,
STARTLEFT+ SIGNWIDTH+ x* SIGNWIDTHEX ,STARTTOP+ SIGNHEIGHT+ y* SIGNHEIGHTEX));
Result:= bmp;
end;
{图片比较.相同返回True
不同返回False}
function TfrmLinkTool.CompareBMP(bmp1, bmp2: TBitmap): Boolean;
var
i,CmpCount,SameCount,SamePercent:Integer;
Line10,Line15,Line20,CmpWidth:Integer;
row1,row2:pByteArray;
begin //
Result:= False;
CmpWidth:= SIGNWIDTH; //提交的图片行的宽度为小图片的宽度.
if (bmp1.Width< CmpWidth) or (bmp2.Width< cmpWidth) then //如果2附图过小,则返回False
Exit;
if bmp1.PixelFormat<> pf8bit then
bmp1.PixelFormat:= pf8bit; //将图片转换成pf8Bit;方便比较
if bmp2.PixelFormat<> pf8bit then
bmp2.PixelFormat:= pf8bit; //将图片转换成pf8Bit;方便比较
Line10:= 9;
Line15:= 14;
Line20:= 19; //只比较3行
CmpCount:= 0; //比较的象素数
SameCount:= 0; //相同的象素数.
row1:= bmp1.ScanLine[Line10]; //取一行
row2:= bmp2.ScanLine[Line10];
for i:= 0 to cmpWidt