1用Findwindow找到一个窗口句柄,窗口里有几个List控件,如何查到自己要控制的list
(知道可以用GetWindow来做,可是不知道如何读取List的属性来得判断是自己想要的)2怎么可以查到list有几条记录,模似控制list的记录从头到尾的记录读出来。

解决方案 »

  1.   

    获取其他进程中ListBox和ComboBox的内容    zswangII(原作)  
      
    关键字     ListBox ComboBox Delphi LB_GETCOUNT LB_GETTEXTLEN LB_GETTEXT LB_GETCOUNT LB_GETTEXTLEN LB_GETTEXT 
      
    (*//
    标题:获取其他进程中ListBox和ComboBox的内容
    说明:Window2000+Delphi6调试通过
    设计:Zswang
    支持:[email protected]
    日期:2004-03-25
    //*)function GetListBoxText(mHandle: THandle; mStrings: TStrings): Boolean;
    var
      vItemCount: Integer;
      I: Integer;
      S: string;
    begin
      Result := False;
      if not Assigned(mStrings) then Exit;
      mStrings.BeginUpdate;
      try
        mStrings.Clear;
        vItemCount := SendMessage(mHandle, LB_GETCOUNT, 0, 0);
        for I := 0 to vItemCount - 1 do begin
          SetLength(S, SendMessage(mHandle, LB_GETTEXTLEN, I, 0));
          SendMessage(mHandle, LB_GETTEXT, I, Integer(@S[1]));
          mStrings.Add(S);
        end;
        SetLength(S, 0);
      finally
        mStrings.EndUpdate;
      end;
      Result := True;
    end; { GetListBoxText }function GetComboBoxText(mHandle: THandle; mStrings: TStrings): Boolean;
    var
      vItemCount: Integer;
      I: Integer;
      S: string;
    begin
      Result := False;
      if not Assigned(mStrings) then Exit;
      mStrings.BeginUpdate;
      try
        mStrings.Clear;
        vItemCount := SendMessage(mHandle, CB_GETCOUNT, 0, 0);
        for I := 0 to vItemCount - 1 do begin
          SetLength(S, SendMessage(mHandle, CB_GETLBTEXTLEN, I, 0));
          SendMessage(mHandle, CB_GETLBTEXT, I, Integer(@S[1]));
          mStrings.Add(S);
        end;
        SetLength(S, 0);
      finally
        mStrings.EndUpdate;
      end;
      Result := True;
    end; { GetComboBoxText }//Example
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      RegisterHotKey(Handle, 1, MOD_WIN, VK_F2);
      RegisterHotKey(Handle, 2, MOD_WIN, VK_F3);
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      UnRegisterHotKey(Handle, 1);
      UnRegisterHotKey(Handle, 2);
    end;procedure TForm1.WMHOTKEY(var Msg: TWMHOTKEY);
    begin
      case Msg.HotKey of
        1:
          GetListBoxText(
            WindowFromPoint(Point(Mouse.CursorPos.X, Mouse.CursorPos.Y)),
            MemoText.Lines);
        2:
          GetComboBoxText(
            WindowFromPoint(Point(Mouse.CursorPos.X, Mouse.CursorPos.Y)),
            MemoText.Lines);
      end;
    end; 
      

  2.   

    谢谢 JavaD(一竿残照),你的代码给我的启发是SendMessage的用法。
    我是在程序窗口中得到listbox,不是从进程中。
      

  3.   

    函数是自己定义的吗?
    function GetListBoxText(mHandle: THandle; mStrings: TStrings): Boolean;
    参数是什么?
      

  4.   

    mHandle是listbox的句柄,mStrings是个字符集合
      

  5.   

    不要告诉我,CSDN真的没人了。
      

  6.   

    var
    hwnd:THandle;
    pos:TPoint;
    GetCursorPos(pos);
    hWnd:=WindowFromPoint(pos);//)获取当前鼠标位置的窗口句柄
      

  7.   

    我现在不是要窗口的语柄,我要控制窗口里的listbox,要得到listbox的句柄
      

  8.   

    当鼠表移到listbox时,得到是listbox句柄,并不是from的
      

  9.   

    那有点像SPY+++了,
    可是我是程序代码来做,如果每次用MOUSE来点很麻烦的。