|
|
|
|
||
教学课题:学会构造自已函数
教学目标:用Delphi7.0编程坏境,以计算器为例模拟鼠标输入QQ号:854487915
教学要点:1、利用现有的知识构造函数_GetWinHwnd1、_GetWinHwnd1、_LeftMDown、_LeftMUp、_MouseLeftDU来优化源代码。
2、认识新函数:(1)、_GetWinHwnd1:用于以目标窗口类名来取目标窗口句柄。返回值类型:整数型(HWND);参数类型:宽字符指针型(PWideChar),目标窗口的窗口类名。函数原型:
function _GetWinHwnd1(ck_Class:PAnsiChar):HWND;
begin
Result:=FindWindow(ck_Class,nil);
end;
(2)、_GetWinHwnd2:用于以目标窗口标题或名称来取目标窗口句柄。返回值类型:整数型(HWND);参数类型:宽字符指针型(PWideChar),目标窗口的窗口标题或名称。函数原型:
function _GetWinHwnd2(ck_Name:PAnsiChar):HWND;
begin
Result:=FindWindow(nil,ck_Name);
end;
(3)、_LeftMDown:用于指定位置模拟鼠标左键按下。无返回值,参数1类型:整数型(Integer),目标坐标X;参数2类型:整数型(Integer),目标坐标Y。函数原型:
procedure _LeftMDown(dx:Integer;dy:Integer);
begin
SetCursorPos(dx,dy); //置鼠标坐标
mouse_event(MOUSEEVENTF_LEFTDOWN,dx,dy,0,0); //鼠标左键按下
end;
(4)、_LeftMUp:用于指定位置模拟鼠标左键弹起。无返回值,参数1类型:整数型(Integer),目标坐标X;参数2类型:整数型(Integer),目标坐标Y。函数原型:
procedure _LeftMUp(dx:Integer;dy:Integer);
begin
SetCursorPos(dx,dy); //置鼠标坐标
mouse_event(MOUSEEVENTF_LEFTUP,dx,dy,0,0); //鼠标左键弹起
end;
(5)、_MouseLeftDU:用于指定位置模拟鼠标左键执行一次点击动作。无返回值,参数1类型:整数型(Integer),目标坐标X;参数2类型:整数型(Integer),目标坐标Y。函数原型:
procedure _MouseLeftDU(dx,dy:Integer);
begin
SetCursorPos(dx,dy); //置鼠标坐标
mouse_event(MOUSEEVENTF_LEFTDOWN,dx,dy,0,0); //鼠标左键按下
Sleep(100);
mouse_event(MOUSEEVENTF_LEFTUP,dx,dy,0,0); //鼠标左键按下
end;
教学源码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
lb1: TLabel;
edt1: TEdit;
btn1: TButton;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses
Unit2;
procedure TForm1.btn1Click(Sender: TObject);
var
ck_hwnd:HWND;
ck_R:TRect;
begin
//ck_hwnd:=FindWindow('SciCalc','计算器');//取目标窗口句柄
ck_hwnd:=_GetWinHwnd2('计算器'); //取目标窗口句柄
edt1.Text := IntToHex(ck_hwnd,8);//显示目标窗口句柄
GetWindowRect(ck_hwnd,ck_R); //取目标窗口矩形坐标
//实现按下数字键8
_MouseLeftDU(350+ ck_R.Left,150+ ck_R.Top);
Sleep(100);
//实现按下数字键5
_MouseLeftDU(350+ ck_R.Left,180+ ck_R.Top);
Sleep(100);
//实现按下数字键4
_MouseLeftDU(310+ ck_R.Left,180+ ck_R.Top);
Sleep(100);
//实现按下数字键4
_MouseLeftDU(310+ ck_R.Left,180+ ck_R.Top);
Sleep(100);
//实现按下数字键8
_MouseLeftDU(350+ ck_R.Left,150+ ck_R.Top);
Sleep(100);
//实现按下数字键7
_MouseLeftDU(310+ ck_R.Left,150+ ck_R.Top);
Sleep(100);
//实现按下数字键9
_MouseLeftDU(390+ ck_R.Left,150+ ck_R.Top);;
Sleep(100);
//实现按下数字键1
_MouseLeftDU(310+ ck_R.Left,210+ ck_R.Top);
Sleep(100);
//实现按下数字键5
_MouseLeftDU(350+ ck_R.Left,180+ ck_R.Top);
end;
end.
Unit2源码:
unit Unit2;
interface
uses
Windows;
function _GetWinHwnd1(ck_Class:PAnsiChar):HWND;
//以窗口类名取目标窗口句柄
function _GetWinHwnd2(ck_Name:PAnsiChar):HWND;
//以窗口标题取目标窗口句柄
procedure _LeftMDown(dx:Integer;dy:Integer);
//模拟鼠标左键按下
procedure _LeftMUp(dx:Integer;dy:Integer);
//模拟鼠标左键弹起
procedure _MouseLeftDU(dx,dy:Integer);
//鼠标左键按下弹起
implementation
function _GetWinHwnd1(ck_Class:PAnsiChar):HWND;
begin
Result:=FindWindow(ck_Class,nil);
end;
function _GetWinHwnd2(ck_Name:PAnsiChar):HWND;
begin
Result:=FindWindow(nil,ck_Name);
end;
procedure _LeftMDown(dx:Integer;dy:Integer);
begin
SetCursorPos(dx,dy); //置鼠标坐标
mouse_event(MOUSEEVENTF_LEFTDOWN,dx,dy,0,0); //鼠标左键按下
end;
procedure _LeftMUp(dx:Integer;dy:Integer);
begin
SetCursorPos(dx,dy); //置鼠标坐标
mouse_event(MOUSEEVENTF_LEFTUP,dx,dy,0,0); //鼠标左键弹起
end;
procedure _MouseLeftDU(dx,dy:Integer);
begin
SetCursorPos(dx,dy); //置鼠标坐标
mouse_event(MOUSEEVENTF_LEFTDOWN,dx,dy,0,0); //鼠标左键按下
Sleep(100);
mouse_event(MOUSEEVENTF_LEFTUP,dx,dy,0,0); //鼠标左键按下
end;
end.