就是说桌面的每一个图标的座标保存为文件.下次可以还原每个图标的座标.
网上有个DLL的.但是没有源码....这样难做到吗?
网上有个DLL的.但是没有源码....这样难做到吗?
解决方案 »
- 我想将一个panel的内容拖拽到dbgrid的某个字段,怎么做》
- 100分,我这样子创建的线程,用什么办法立即终止呢?
- 存儲過程參數問題.
- EhLib显示数值型数据有问题还是我的代码有问题???
- formula one6.0如何安装?
- 谁有ehlib2.4,给发一份给我。[email protected]。谢谢。
- 数据库的备份和还原
- 求ADO连接ConnectionString连接方法
- 100分求解决使用CPortLib的问题
- 请教DELPHI中的备份数据功能和还原数据功能的实现方式?
- 急问题:clientdataset更新后字符型数据后面加空格补齐的原因
- 如何通过程序将SQL Server的一个text字段的内容追加到另外一个text字段中,
对应VCL中的TListView,只要参考VCL中的实现即可读取控制
当然需要跨进程访问参考如下代码:function GetListViewText( // 取得其他进程中ListView的内容
mHandle: THandle; // ListView句柄
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;
vLVColumn: TLVColumn;
begin
Result := False;
if not Assigned(mStrings) then Exit;
vItemCount := ListView_GetItemCount(mHandle);
if vItemCount <= 0 then Exit;
Delete(S, 1, 1);
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;
///////Begin 计算分栏
S := '';
vColumnCount := 0;
vLVColumn.mask := LVCF_TEXT;
vLVColumn.pszText := Pointer(Cardinal(vPointer) + SizeOf(vLVColumn));
vLVColumn.cchTextMax := SizeOf(vBuffer);
WriteProcessMemory(vProcess, vPointer, @vLVColumn,
SizeOf(vLVColumn), vNumberOfBytesRead);
while BOOL(SendMessage(mHandle, LVM_GETCOLUMN,
vColumnCount, Longint(vPointer))) do
begin
ReadProcessMemory(vProcess, vLVColumn.pszText,
@vBuffer[0], SizeOf(vBuffer), vNumberOfBytesRead);
S := S + #9 + vBuffer;
Inc(vColumnCount);
end;
vColumnCount := Max(vColumnCount, 1);
///////End 计算分栏
Delete(S, 1, 1);
if S <> '' then mStrings.Add(S);
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(vItem));
end;
WriteProcessMemory(vProcess, vPointer, @vItem,
SizeOf(TLVItem), vNumberOfBytesRead);
SendMessage(mHandle, LVM_GETITEM, I, lparam(vPointer));
ReadProcessMemory(vProcess, vItem.pszText,
@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 }
begin
ListView1.Items[0].Position := Point(100, 100);
end;procedure ListView_SetItemPosition32(hwndLV: HWND; i, x, y: Integer);
var
ptNewPos: TPoint;
begin
ptNewPos.x := x;
ptNewPos.y := y;
SendMessage(hwndLV, LVM_SETITEMPOSITION32, i, Longint(@ptNewPos));
end;