FindWindow函数


如果你知道该窗口的类名或标题,可以直接将类名或标题代入下面的FindWindow函数中,下面的代码首先查找目标窗口的句柄,再枚举该窗口的子窗口,判断子窗口的类名是否为"Edit"或"TEdit",若是,则认为已经找到编缉框。找到后,再发送WM_GETTEXTLENGTH和WM_GETTEXT消息来获取编缉框的文本长度及内容。
var
  hwndEdit:THandle;

function EnumWindowProc(hwnd:THandle;lParam:LPARAM):BOOL;stdcall;
var
  ClassName:array[0..255] of Char;
begin
  Result:=True;
  if GetClassName(hwnd,ClassName,256)>0 then
    if SameText(ClassName,'TEdit') or SameText(ClassName,'Edit') then
    begin
      Result:=False;
      hwndEdit:=hwnd;
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  hWin:THandle;
  buf:string;
  iLen:Integer;
begin
  hwndEdit:=0;
  hWin:=FindWindow('TRegFrm',nil);
  if hWin<>0 then
  begin
    EnumChildWindows(hWin,@EnumWindowProc,0);
  end;
  if hwndEdit>0 then
  begin
    iLen:=SendMessage(hwndEdit,WM_GETTEXTLENGTH,0,0);
    SetLength(buf,iLen+1);
    GetWindowText(hwndEdit,PChar(@buf[1]),iLen+1);
    ShowMessage(buf);
  end;
end;

//附:如果你不知道目标窗口的类名,那么请在窗口上放一个TTimer,一个TEdit
在OnTimer事件中写如下代码,编译执行后将Mouse移到目标窗口上,目标窗口的类名则会显示在TEdit上。
procedure TForm1.Timer1Timer(Sender: TObject);
var
  p:TPoint;
  hwnd:THandle;
  ClassName:array[0..255] of Char;
begin
  GetCursorPos(p);
  hwnd:=WindowFromPoint(p);
  if hwnd<>0 then
  begin
    GetClassName(hwnd,ClassName,256);
    Edit1.Text:=ClassName
  end;
end; 


1、如果是ComboBox,那么将
  if SameText(ClassName,'TEdit') or SameText(ClassName,'Edit') then
  改为
  if SameText(ClassName,'TComboBox') or SameText(ClassName,'COMBOBOX') then
  最好使用上面附带的方法查看一下它的类名。一般情况下为COMBOBOX或TComboBox
2、如果是多个编缉框,可以修改一下上面的代码:
function EnumWindowProc(hwnd:THandle;lParam:LPARAM):BOOL;stdcall;
var
  ClassName:array[0..255] of Char;
  buf:string;
  iLen:Integer;
begin
  Result:=True;
  if GetClassName(hwnd,ClassName,256)>0 then
    if SameText(ClassName,'TComboBox') or SameText(ClassName,'COMBOBOX') then
    begin
      iLen:=SendMessage(hwnd,WM_GETTEXTLENGTH,0,0);
      SetLength(buf,iLen+1);
      GetWindowText(hwnd,PChar(@buf[1]),iLen+1);
      ShowMessage(buf);
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  hWin:THandle;
begin
  hwndEdit:=0;
  hWin:=FindWindow('TRegFrm',nil);
  if hWin<>0 then
    EnumChildWindows(hWin,@EnumWindowProc,0);
end; 
 
LISTBOX处理方法不一样,需要一条一条地读取。
var
  iCount,iLen,I:Integer;
  retStr:string;
  buf:string;
begin
  retStr:='';
  iCount:=SendMessage(hwnd,LB_GETCOUNT,0,0);
  for I:=0 to iCount-1 do
  begin
    iLen:=SendMessage(hwnd,LB_GETTEXTLEN,0,0);
    SetLength(buf,iLen+1);
    SendMessage(hwnd,LB_GETTEXT,I,Integer(@buf[1]));
    retStr:=retStr+Trim(buf)+#13#10;
  end;
  ShowMessage(retStr);
end;  

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值