Delphi : GetWindowRect获取窗口矩形坐标,SetCursorPos设置鼠标位置

Delphi : GetWindowRect获取窗口矩形坐标,SetCursorPos设置鼠标位置_硬软兼得_新浪博客,硬软兼得,1)、GetWindowRect,用于取窗口矩形坐标。返回值类型:布尔型(LongBool)。执行成功返回真(True),否则返回假 (False);参数1类型:整数型(HWND),目标窗口的窗口句柄;参数2类型:坐标结构(RECT),目标窗口的坐标结构地址。在Windows SDK中的函数原型:
BOOL GetWindowRect(
   HWND hWnd, // handle of window       参数1:目标窗口句柄
   LPRECT lpRect  // address of structure for window coordinates 参数2:窗口的坐标结构地址
  );

RECT定义:

typedef struct _RECT {    // rc 
   LONG left;        //桌面窗口到目标窗口的左边距
   LONG top;        //桌面窗口到目标窗口的顶边距
   LONG right;      //桌面窗口到目标窗口的右边距
   LONG bottom;  //桌面窗口到目标窗口的底边距
} RECT;

(2)、SetCursorPos,用于设置鼠标当前位置。返回值类型:布尔型(LongBool)。执行成功返回真(True),否则返回假 (False);参数1类型:整数型(Integer),水平位置X;参数2类型:整数型(Integer),垂直位置Y。在Windows SDK中的函数原型:
BOOL SetCursorPos(

   int X, // horizontal position  参数1:水平位置
   int Y  // vertical position      参数2:垂直位置
  );

(3)、mouse_event,用于模拟鼠标动作。无返回值。参数1类型:整数型(Integer),鼠标动作标识;参数2类型:整数型 (Integer),鼠标动作的水平坐标X;参数3类型:整数型(Integer),鼠标动作的垂直坐标Y;参数4类型:整数型(Integer),鼠标 滚轮转动方向,若当前鼠标无滚轮动作,则取值为0;参数5在Windows SDK中的函数原型:
VOID mouse_event(

   DWORD dwFlags, // flags specifying various motion/click variants 鼠标动作标识
   DWORD dx, // horizontal mouse position or position change 鼠标动作的水平坐标
   DWORD dy, // vertical mouse position or position change 鼠标动作垂直坐标
   DWORD dwData, // amount of wheel movement 当鼠标动作标识为MOUSEEVENTF_WHEEL时,此参数为鼠标滚轮转动方向,正值表示滚轮向前旋转,远离用户;负值表示滚轮向后旋转,向用户。
   DWORD dwExtraInfo  // 32 bits of application-defined information 设定一个32位值用于取扩展信息
  );

鼠标动作标识:

MOUSEEVENTF_MOVE            = $0001; { mouse move 鼠标移动}
MOUSEEVENTF_LEFTDOWN        = $0002; { left button down 左键按下}
MOUSEEVENTF_LEFTUP          = $0004; { left button up 左键弹起}
MOUSEEVENTF_RIGHTDOWN       = $0008; { right button down 右键按下}
MOUSEEVENTF_RIGHTUP         = $0010; { right button up 右键弹起}
MOUSEEVENTF_MIDDLEDOWN      = $0020; { middle button down 中间按下}
MOUSEEVENTF_MIDDLEUP        = $0040; { middle button up 中键弹起}
MOUSEEVENTF_WHEEL           = $0800; { wheel button rolled 滚轮移动}
MOUSEEVENTF_ABSOLUTE        = $8000; { absolute move 绝对移动}

2、认识Delphi函数:IntToStr,用于整数数值转换为字符串。返回值类型:字符型(string),函数执行成功返回指定十进制数值的十进制字符串型;参数类型:整数型(Integer),目标数值的十进制数值。函数原型:
function IntToStr(
Value: Integer;  //参数:要转换的十进制数值
): string;

源码:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
   lb1: TLabel;
   edt1: TEdit;
   btn1: TButton;
   lb2: TLabel;
   procedure btn1Click(Sender: TObject);
private
   { Private declarations }
public
   { Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
var
ck_hwnd:HWND;
ck_R:TRect;
begin
ck_hwnd:=FindWindow(‘SciCalc’,’计算器’);
edt1.Text := IntToHex(ck_hwnd,8);
GetWindowRect(ck_hwnd,ck_R);
lb2.Caption := IntToStr(ck_r.Left)+’,’+ IntToStr(ck_R.Top)+’/’+
IntToStr(ck_R.Right)+ ‘,’+ IntToStr(ck_R.Bottom );
//实现按下数字键8
SetCursorPos(350+ ck_R.Left ,150+ ck_R.Top )  ;
mouse_event(MOUSEEVENTF_LEFTDOWN,350+ ck_R.Left,150+ ck_R.Top,0,0);
Sleep(100);
mouse_event(MOUSEEVENTF_LEFTUP,350+ ck_R.Left,150+ ck_R.Top,0,0);

end;

end.

分享到: 更多 (0)