能给一个列子吗?
感谢回复人: zswang(伴水清清)(专家门诊清洁工)已经解决了
如何获取另一个进程中的SysListView的items的text;

解决方案 »

  1.   

    procedure TForm1.WMHOTKEY(var Msg: TWMHOTKEY);
    var
      I, J: Integer;
      vItem: TLVItem;
      vCount: Integer;
      vHandle: THandle;
      vBuffer: array[0..255] of Char;
      pBuffer: PChar;
      vProcess: THandle;
      vProcessId: DWORD;
      vPointer: Pointer;
      vNumberOfBytesRead: Cardinal;
    begin
      case Msg.HotKey of
        cHotKeyWinF2: begin
          FillChar(vBuffer, 256, #45);
          vHandle := WindowFromPoint(Point(Mouse.CursorPos.X, Mouse.CursorPos.Y));
          vCount := ListView_GetItemCount(vHandle);
          if vCount = 0 then Exit;
          GetWindowThreadProcessId(vHandle, @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);
          try
            for I := 0 to vCount - 1 do begin
              for J := 0 to StrToIntDef(EditCount.Text, 0) - 1 do begin
                with vItem do begin
                  mask := LVIF_TEXT;
                  iItem := I;
                  iSubItem := J;
                  cchTextMax := 255;
                  pszText := Pointer(Cardinal(vPointer) + SizeOf(TLVItem));
                end;
                WriteProcessMemory(vProcess, vPointer, @vItem,
                  SizeOf(TLVItem), vNumberOfBytesRead);
                pBuffer := vBuffer;
                ///////Begin
                StrCopy(pBuffer, PChar(Format('[%d,%d]', [I, J])));
                ///////End
                WriteProcessMemory(vProcess, Pointer(Cardinal(vPointer) + SizeOf(TLVItem)),
                  pBuffer, DWORD(256), vNumberOfBytesRead);
                SendMessage(vHandle, LVM_SETITEM, I, lparam(vPointer));
              end;
            end;
          finally
            VirtualFreeEx(vProcess, vPointer, 0, MEM_RELEASE);
            CloseHandle(vProcess);
          end;
        end;
      end;
    end;