1,183
社区成员




var
TextBuffer: array[0..100] of Char;
Count: Integer;
I: Integer;
H: HWND;
function ListView_GetItemText_Ex(hwndLV: HWND; i, iSubItem: Integer;
pszText: PChar; cchTextMax: Integer): Integer;
var
LVItem: TLVItem;
ProcessID, ProcessHD, Temp: DWORD;
MemPoint: Pointer;
begin
GetWindowThreadProcessId(hwndLV, ProcessID);
ProcessHD := OpenProcess(
PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE,
FALSE, ProcessID);
MemPoint := VirtualAllocEx(ProcessHD, nil, SizeOf(TLVItem) + cchTextMax,
MEM_COMMIT, PAGE_READWRITE);
LVItem.iSubItem := iSubItem;
LVItem.cchTextMax := cchTextMax;
LVItem.pszText := PChar(Integer(MemPoint) + SizeOf(TLVItem));
WriteProcessMemory(ProcessHD, MemPoint, @LVItem, SizeOf(TLVItem), Temp);
Result := SendMessage(hwndLV, LVM_GETITEMTEXT, i, Integer(MemPoint));
ReadProcessMemory(ProcessHD, Pointer(Integer(MemPoint) + SizeOf(TLVItem)),
pszText, cchTextMax, Temp);
VirtualFreeEx(ProcessHD, MemPoint, SizeOf(TLVItem) + cchTextMax,
MEM_DECOMMIT);
VirtualFreeEx(ProcessHD, MemPoint, 0, MEM_RELEASE);
end;
begin
Result := False;
H := FindWindow('Progman', 'Program Manager');
H := GetWindow(H, GW_CHILD);
H := GetWindow(H, GW_CHILD);
Count := SendMessage(H, LVM_GETITEMCOUNT, 0, 0);
for I := 0 to Count - 1 do
begin
ListView_GetItemText_Ex(H, i, 0, TextBuffer, 100); //TextBuffer 为桌面内容
end;
end;
function GetTargetOfShorCut(LinkFile: string): string;
const
IID_IPersistFile: TGUID = '{0000010B-0000-0000-C000-000000000046}';
var
intfLink: IShellLink;
IntfPersist: IPersistFile;
pfd: _WIN32_FIND_DATA;
bSuccess: Boolean;
T:TStringList;
begin
Result := '';
CoInitialize(nil);
T:=TStringList.Create;
IntfLink := CreateComObject(CLSID_ShellLink) as IShellLink;
SetString(Result, nil, MAX_PATH);
bSuccess := (IntfLink <> nil) and
SUCCEEDED(IntfLink.QueryInterface(IID_IPersistFile, IntfPersist))
and SUCCEEDED(IntfPersist.Load(PWideChar(WideString(LinkFile)), STGM_READ))
and
SUCCEEDED(intfLink.GetPath(PAnsiChar(Result), MAX_PATH, pfd, SLGP_RAWPATH));
if not bSuccess then
Result := '';
CoUninitialize;
end