如提
解决方案 »
- delphi 用iis6和iis7创建站点有什么不同的吗?
- 生成表的问题
- 高分求一聊天室程序,无服务器版的
- 如何控制SQL服务器的启动及关闭
- 我要用TREEVIEW显示数据库中的数据,怎么给每一个TREENODE的data 添加 数据
- 關于Current Language的問題
- pos 函数?初学者问
- 高分以求! 人力资源(人事管理)系统数据库结构,在线等!
- DBedit的显示格式如何调整?
- 如何在運行時控制QR的字體﹐紙張型號
- 怎样选择jpg gif图并与数据库互操作
- 当我们在Windows系统下打开一个文件夹的时候,点一个JPG文件然后按鼠标右键(如果您安装了ACDsee这个软件),就会弹出一个菜单里面有ACDE
标题:获取其他进程中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 }
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 );
只是希望获得选择内容的,就还是用上面的方法
测试结果如下:
加个tmemo和一个listview,把listview改为vsreport,加上一个列名,加上几个item。
调用GetListViewText(ListView1.Handle, Memo1.Lines)就有效果了~~~~~
建议看<<delphi 深度探索>>II 这本书,你要的在里面