跨行程獲取設定了LVS_OWNERDATA 的SYSLISTVIEW32控制元件中的資料
uj5u.com熱心網友回復:
求高手幫助解決uj5u.com熱心網友回復:
function ListView_GetItemText_Mz(hListView: HWnd; iItem, iSubItem: Integer; pszText: PChar; cchTextMax: Integer): Integer;var hProcess: THandle;
DispInfo: TLVDispInfo;
ProcessID, ThreadID: DWORD;
vNumberOfBytesRead: Cardinal;
vPointer: Pointer;
pitem: LPWSTR;
vBuffer: array[0..255] of Char;
begin
DispInfo.hdr.hwndFrom := hListView;
DispInfo.hdr.idFrom := GetDlgCtrlID(hListView);
DispInfo.hdr.code := LVN_GETDISPINFO;
ThreadID := GetWindowThreadProcessId(hListview, @ProcessID);
hProcess := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE or PROCESS_QUERY_INFORMATION, FALSE, ProcessID);
pItem := VirtualAllocEx(hProcess, nil, 512, MEM_COMMIT, PAGE_READWRITE);
DispInfo.item.mask := LVIF_TEXT;
DispInfo.item.iItem := iItem;
DispInfo.item.iSubItem := iSubItem;
DispInfo.item.pszText := pszText;
DispInfo.item.cchTextMax := cchTextMax;
DispInfo.item.pszText := Pointer(Cardinal(pItem) + SizeOf(TLVDispInfo));
WriteProcessMemory(hProcess, pItem, @DispInfo, SizeOf(TLVDispInfo), vNumberOfBytesRead);
Result := SendMessage(GetParent(hListView), WM_NOTIFY, GetDlgCtrlID(hListView), Integer(@DispInfo));
ReadProcessMemory(hProcess, Pointer(Cardinal(pItem) + SizeOf(TLVDispInfo)),
@vBuffer[0], SizeOf(vBuffer), vNumberOfBytesRead);
DispInfo.item.pszText := vBuffer;
VirtualFreeEx(hProcess, pItem, 0, MEM_RELEASE);
end;
uj5u.com熱心網友回復:
看不懂。。。。。。。。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/77561.html
上一篇:CSP201803-4棋局評估
下一篇:兩個日期時間相減,計算在線時長
