public function mygettext(hwnd:THandle):string;//获取EDIT中的内容 end;
var Form1: TForm1; cnt : Integer = 0;//向控件发送索引标识
//----------------两个枚举函数------------------------------ function EnumWindowsProc(Hwnd:THandle;lParam:LParam):boolean;Stdcall; function EnumChildProc(Hwnd:THandle;lParam:LParam):boolean;Stdcall;
implementation uses Unitdata,UnitPubFun2,UnitPubFun1,UnitPubVar1; {$R *.dfm} function TForm1.mygettext(hwnd:THandle):string; var buf:pchar; len:Longint; begin Len:=Longint(SendMessage(hWnd,WM_GETTEXTLENGTH ,0,0));//发送消息映射取文本长度 if len>0 then begin//1 try getmem(buf,len); SendMessage(hWnd,WM_GETTEXT,Len+1,Int64(buf));//发送消息映射取文本内容 Result:=strpas(buf); finally freemem(buf); end; end;//1 end;
function EnumWindowsProc(Hwnd:THandle;lParam:LParam):boolean; var WindowCaption:array[0..254] of Char; begin GetWindowText(Hwnd,WindowCaption,255); //枚举回调函数 取内存中窗口的标题 if StrPas(WindowCaption)='登入游戏' then//如果找到你要的指定标识 begin cnt := 0; EnumChildWindows(Hwnd,@EnumChildProc,0);//枚举他的子窗口 Result := False; Exit; end; Result := True; end;
function EnumChildProc(Hwnd:THandle;lParam:LParam):boolean; var WindowCaption,WindowClass:array[0..254] of Char; begin GetClassName(Hwnd,WindowClass,255); //获取子窗口控件类名 if Pos('EDIT',UpperCase(StrPas(WindowClass))) > 0 then //如果是EDIT控件 begin Inc(cnt); SendMessage(Hwnd,WM_SETTEXT,0,LongInt(PChar(IntToStr(cnt))));//向控件发送索引 if Form1.mygettext(Hwnd)='1' then //FORM中最后放下去的EDIT控件的索引 会被系统自动发送成1 begin//2 //倒数第二个放下去的EDIT控件的索引会被系统自动发送成2 //依次类推 SendMessage(Hwnd,WM_SETTEXT,0,LongInt(PChar(Form1.Edit2.Text))); end;//2 if Form1.mygettext(Hwnd)='2' then //如果目标锁定则发送消息字符消息 begin//2 SendMessage(Hwnd,WM_SETTEXT,0,LongInt(PChar(Form1.Edit1.Text))); end;//2 end; Result := True; end;
procedure TForm1.lv1DblClick(Sender: TObject); begin //PublicLi:=lv1.Selected ; Enumwindows(@EnumWindowsProc,0); end;
procedure TForm1.Button1Click(Sender: TObject); begin Enumwindows(@EnumWindowsProc,0); end;
----------------------------------------------