如提

解决方案 »

  1.   

    如果是取其它窗口的,那比较麻烦,可参考这里,http://www.chinaitpower.com/A/2002-03-20/17287.html获取其他进程中ListView的文本 (*//
    标题:获取其他进程中ListView的文本
    说明:Window2000+Delphi6调试通过
    设计:Zswang
    支持:[email protected]
    日期:2004-03-25
    //*)uses CommCtrl;function ListViewColumnCount(mHandle: THandle): Integer;
    begin
      Result := Header_GetItemCount(ListView_GetHeader(mHandle));
    end; { ListViewColumnCount }function GetListViewText(mHandle: THandle; mStrings: TStrings): Boolean;
    var
      vColumnCount: Integer;
      vItemCount: Integer;
      I, J: Integer;
      vBuffer: array[0..255] of Char;
      vProcessId: DWORD;
      vProcess: THandle;
      vPointer: Pointer;
      vNumberOfBytesRead: Cardinal;
      S: string;
      vItem: TLVItem;
    begin
      Result := False;
      if not Assigned(mStrings) then Exit;
      vColumnCount := ListViewColumnCount(mHandle);
      if vColumnCount <= 0 then Exit;
      vItemCount := ListView_GetItemCount(mHandle);
      GetWindowThreadProcessId(mHandle, @vProcessId);
      vProcess := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ or
        PROCESS_VM_WRITE, False, vProcessId);
      vPointer := VirtualAllocEx(vProcess, nil, 4096, MEM_RESERVE or MEM_COMMIT,
        PAGE_READWRITE);
      mStrings.BeginUpdate;
      try
        mStrings.Clear;
        for I := 0 to vItemCount - 1 do begin
          S := ';
          for J := 0 to vColumnCount - 1 do begin
            with vItem do begin
              mask := LVIF_TEXT;
              iItem := I;
              iSubItem := J;
              cchTextMax := SizeOf(vBuffer);
              pszText := Pointer(Cardinal(vPointer) + SizeOf(TLVItem));
            end;
            WriteProcessMemory(vProcess, vPointer, @vItem,
              SizeOf(TLVItem), vNumberOfBytesRead);
            SendMessage(mHandle, LVM_GETITEM, I, lparam(vPointer));
            ReadProcessMemory(vProcess, Pointer(Cardinal(vPointer) + SizeOf(TLVItem)),
              @vBuffer[0], SizeOf(vBuffer), vNumberOfBytesRead);
            S := S + #9 + vBuffer;
          end;
          Delete(S, 1, 1);
          mStrings.Add(S);
        end;
      finally
        VirtualFreeEx(vProcess, vPointer, 0, MEM_RELEASE);
        CloseHandle(vProcess);
        mStrings.EndUpdate;
      end;
      Result := True;
    end; { GetListViewText }
      

  2.   

    sendMessage 中用这个参数:LVM_GETSELECTEDCOLUMN Retrieves an integer that specifies the selected column.Syntax
    To send this message, call the SendMessage function as follows. 
    lResult = SendMessage(      // returns UINT in lResult     (HWND) hWndControl,      // handle to destination control     (UINT) LVM_GETSELECTEDCOLUMN,      // message ID     (WPARAM) wParam,      // = 0; not used, must be zero    (LPARAM) lParam      // = 0; not used, must be zero );  
      

  3.   

    在Windows文件夹 本来就是一个  ListView
      

  4.   

    确实是SysListView32对象来的如果你是右键菜单处理的,开发Shell Extension就可以的
    只是希望获得选择内容的,就还是用上面的方法
      

  5.   

    TO aiirii :怎么没有放映?
      

  6.   

    进来关注学习的~~~~
    测试结果如下:
    加个tmemo和一个listview,把listview改为vsreport,加上一个列名,加上几个item。
    调用GetListViewText(ListView1.Handle, Memo1.Lines)就有效果了~~~~~
      

  7.   

    TO: g961681:不是获取自己的,是系统的我的意思是想获取windows系统下,当我们打开一个文件夹时,我们点一个文件或连续选中几个文件的时,这个时候按鼠标右键会弹出一个菜单,菜单名字叫“查看您选种的文件和数量”,这个时候会报出文件名,和一共选了几个文件。
      

  8.   

    >>这个时候会报出文件名,和一共选了几个文件。不同的实现,你搞混了,
    建议看<<delphi 深度探索>>II  这本书,你要的在里面