uses CommCtrl;
procedure TForm1.Button1Click(Sender: TObject);
var
vHandle: THandle;
vCount: Integer;
I: Integer;
vProcessID: THandle;
vProcess: THandle;
vNumberOfBytesRead: DWORD;
vPointer: Pointer;
vBuffer: array[0..255] of Char;
begin
vHandle := FindWindow('Shell_TrayWnd', nil);
vHandle := FindWindowEx(vHandle,0,'ReBarWindow32', nil);
vHandle := FindWindowEx(vHandle,0,'MSTaskSwWClass', nil);
vHandle := FindWindowEx(vHandle,0,'ToolbarWindow32', nil);
vCount := SendMessage(vHandle, TB_BUTTONCOUNT,0,0);
GetWindowThreadProcessId(vHandle,@vProcessId);
vProcess := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE, False, vProcessId);
vPointer := VirtualAllocEx(vProcess, nil,$1000, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
try
for I :=0 to vCount -1 do
begin
SendMessage(vHandle, TB_GETBUTTONTEXT, I, Integer(vPointer));
ReadProcessMemory(vProcess, vPointer,@vBuffer,
SizeOf(vBuffer), vNumberOfBytesRead);
OutputDebugString(@vBuffer); end;
finally
VirtualFreeEx(vProcess, vPointer,0, MEM_RELEASE);
CloseHandle(vProcess);
end;
end;