1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
| h := FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'ReBarWindow32', nil); h:=FindWindowEx(h,0,'MSTaskSwWClass',nil); h:=FindWindowEx(h,0,'SysTabControl32',nil);
Nr:=SendMessage(h,TCM_GETITEMCOUNT,0,0);
ProcessId := 0; GetWindowThreadProcessId(h, @ProcessId); Process := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE, False, ProcessId);
Size := SizeOf(TtcItem); MemLocal := VirtualAlloc(nil, Size, MEM_COMMIT, PAGE_READWRITE); MemRemote := VirtualAllocEx(Process, nil, Size, MEM_COMMIT, PAGE_READWRITE);
for A:= 0 to Nr do
begin
ZeroMemory(MemLocal, SizeOf(TtcItem));
MemLocal^.mask := TCIF_TEXT; MemLocal^.pszText := 'TEST'; MemLocal^.cchTextMax:=256;
NumBytes:=0; WriteProcessMemory(Process, MemRemote, MemLocal, Size, NumBytes); SendMessage(h, TCM_GETITEM, 0, integer(MemRemote)); ReadProcessMemory(Process, MemRemote, MemLocal, Size, NumBytes); ShowMessage(String(MemLocal^.pszText)); end; if Assigned(MemRemote) then VirtualFreeEx(Process, MemRemote, 0, MEM_RELEASE); if Assigned(MemLocal) then VirtualFree(MemLocal, 0, MEM_RELEASE); CloseHandle(Process); |