使SendMessage(Handle,LVM_GETITEMTEXTA,0,0)
时出现Undeclared identifier: 'LVM_GETITEMTEXTA'

解决方案 »

  1.   


    如上图,现在我能取得这个ListView的Handle,但不知道怎样通过
    SendMessage取得里面的数据项如880.00
      

  2.   

    USES
      CommCtrl;var
      str: String;
    begin
      SetLength(Str,MAX_PATH);
      SetLength(Str,ListView_GetItemText( ListView1.Handle,0 (*第I+1行*),3(*第J+1列*),PChar(Str),MAX_PATH));
      ShowMessage(str);
    end;
      

  3.   

    给你两个链接,分别是两种方法。(两个都是获取StringGrid中的内容的,但是原理一样,可以参考参考)1. 这个是利用你发消息的方法实现的。这个就是你想要的。
    http://blog.myspace.cn/1304962666/archive/2008/03/02/400443737.aspx2. 原理:HOOK进入其他程序进程-》创建代理窗体-》内存共享-》利用RTTI获取内容。
    http://www.3800hk.com/Article/cxsj/delphi/yswddp/2005-08-20/Article_53237.html
      

  4.   

    你把那个Handle换一下不就可以了?
      

  5.   

    呵呵,昨天也想到了,可是加分时提示需要一天才能加,现在加上了,放心吧,只要小弟问题能解决,分不成问题
    -------------------------------------------------------
    Handle我换成的是第三方软件ListView的Handle,但程序正式运行时提示内存异常,然后第三方软件就自动关闭了
      

  6.   

    uses
      Windows;
    ...
    var
      Data: PChar;
      iLen: DWORD;
      str: String;
    begin
      iLen := MAX_PATH;
      Data := PChar(GlobalAlloc(GPTR, iLen));
      
      iLen := ListView_GetItemText( ListView_Handle,0 (*第I+1行*),3(*第J+1列*),Data ,iLen));
      SetString(Str,Data,iLen);
      GlobalFree(Data);
      ShowMessage(str);
    end;
      

  7.   

    GlobalFree(Data);这一行报下面的错误
    Incompatible types: 'Cardinal' and 'PAnsiChar'
      

  8.   

    function Process_Start(P:pointer):boolean;stdCall;
    var
    ProHandle:THandle;
    PC:TPoint;
    R:TRect;
    wndClass: array[0..100] of Char;
    Data: PChar;
    iLen: DWORD;
    str: String;
    begin
        ProHandle:=FindWindowEx(0,0,nil,'Form1');
        Process.Memo1.Lines.Insert(0,inttostr(ProHandle));
        if ProHandle<>0 then
        begin
           GetWindowRect(ProHandle,R);
           PC:=R.TopLeft;
           PC.X:=PC.X+100;
           PC.Y:=PC.Y+100;
           ProHandle:=ChildWindowFromPoint(ProHandle,PC);
           if ProHandle<>null then
           begin
              GetClassName(ProHandle,wndClass,255);
              iLen := MAX_PATH;
              Data := PChar(GlobalAlloc(GPTR, iLen));
              iLen := ListView_GetItemText(ProHandle,0 ,3,Data ,iLen);
              SetString(Str,Data,iLen);
              Process.Memo1.Lines.Insert(0,string(wndClass)+'------------'+inttostr(ProHandle)+'-----'+str);
              GlobalFree(Cardinal(Data));
           end;
        end;
    end;
    输出str为空