jim19 发表于 2023-7-16 07:30

列表小偷

本帖最后由 jim19 于 2023-7-16 10:09 编辑

自己开发的一个软件, 很多列表很长, 不注册也无法保存, 用ocr很费劲, 所以开发了这么个小软件, 原理就是通过sendmessage LVM_GETITEM获取列表数据, 使用也很简单, 对着有列表的控件, 然后按快捷键win+f2就可以了.

譬如下面这种类型的采集软件








软件对所有列表都生效, 下面用windows文件夹仅作演示.




核心代码delphi:

function GetListViewText(mHandle: THandle; mStrings: TStrings): Boolean;
var
vColumnCount: Integer;
vItemCount: Integer;
I, J: Integer;
vBuffer: array 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, 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;

月下仙 发表于 2023-7-17 09:07

感谢分享,W11下载不可用,能打开软件,点击文件、热键、功能均提示错误:Access violation at address0046E232 in module'列表小偷。exe'.Read of
address 000000B4.

jim19 发表于 2023-7-16 09:59

知心 发表于 2023-7-16 09:49
dir >list.txt 可以实现类似的功能

额, 貌似我录像用错了例子... 手上没有现成的那种采集软件 ,信息要收费才保存的例子.

天天涨停天天盈 发表于 2023-7-16 09:33

很牛 等一个蓝奏   适合批量复制文件名

知心 发表于 2023-7-16 09:49

dir >list.txt 可以实现类似的功能

孤王 发表于 2023-7-16 10:03

先收藏,备用,感谢分享!

liuwei199002 发表于 2023-7-16 10:08

感谢分享

dachuan 发表于 2023-7-16 10:57

先收藏了感谢分享

梁茵 发表于 2023-7-16 11:08

挺厉害,这都想得到可以获取列表,长知识了顺便收藏或许以后能用

syrf123 发表于 2023-7-16 12:11

感谢楼主分享,这是很用心的工具。

lizooo 发表于 2023-7-16 12:20

试试看网页上的列表能不能偷出来{:1_918:}
页: [1] 2 3
查看完整版本: 列表小偷