如题
uses CommCtrl;procedure TForm1.Button1Click(Sender: TObject);
var
vHandle: THandle;
vCount: Integer;
vProcessId: Longword;
vProcess: THandle;
vPointer: Pointer;
vBuffer: array[0..255] of Char;
vNumberOfBytesRead: Longword;
I: Integer;
vTBBUTTON: TTBButton;
vWindow: THandle;
begin
vHandle := FindWindow('Shell_TrayWnd', nil);
vHandle := FindWindowEx(vHandle, 0, 'ReBarWindow32', nil);
vHandle := FindWindowEx(vHandle, 0, 'MSTaskSwWClass', nil);
vHandle := FindWindowEx(vHandle, 0, 'ToolbarWindow32', nil);
if vHandle = 0 then Exit;
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_GETBUTTON, i, Integer(vPointer));
ReadProcessMemory(vProcess, vPointer, @vTBBUTTON,
SizeOf(TTBButton), vNumberOfBytesRead);
if vTBBUTTON.fsStyle = 170 then Continue; // 组按钮
ReadProcessMemory(vProcess, Pointer(vTBBUTTON.dwData), @vWindow,
SizeOf(Integer), vNumberOfBytesRead);
SendMessage(vHandle, TB_GETBUTTONTEXT, i, Integer(vPointer));
ReadProcessMemory(vProcess, vPointer,
@vBuffer[0], SizeOf(vBuffer), vNumberOfBytesRead);
showmessage(PChar(Format('Handle=%d,Title=%s', [vWindow, vBuffer])));
end;
finally
VirtualFreeEx(vProcess, vPointer, 0, MEM_RELEASE);
CloseHandle(vProcess);
end;
end;
按钮控件换成时间控件
uses CommCtrl;procedure TForm1.Button1Click(Sender: TObject);
var
vHandle: THandle;
vCount: Integer;
vProcessId: Longword;
vProcess: THandle;
vPointer: Pointer;
vBuffer: array[0..255] of Char;
vNumberOfBytesRead: Longword;
I: Integer;
vTBBUTTON: TTBButton;
vWindow: THandle;
begin
vHandle := FindWindow('Shell_TrayWnd', nil);
vHandle := FindWindowEx(vHandle, 0, 'ReBarWindow32', nil);
vHandle := FindWindowEx(vHandle, 0, 'MSTaskSwWClass', nil);
vHandle := FindWindowEx(vHandle, 0, 'ToolbarWindow32', nil);
if vHandle = 0 then Exit;
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_GETBUTTON, i, Integer(vPointer));
ReadProcessMemory(vProcess, vPointer, @vTBBUTTON,
SizeOf(TTBButton), vNumberOfBytesRead);
if vTBBUTTON.fsStyle = 170 then Continue; // 组按钮
ReadProcessMemory(vProcess, Pointer(vTBBUTTON.dwData), @vWindow,
SizeOf(Integer), vNumberOfBytesRead);
SendMessage(vHandle, TB_GETBUTTONTEXT, i, Integer(vPointer));
ReadProcessMemory(vProcess, vPointer,
@vBuffer[0], SizeOf(vBuffer), vNumberOfBytesRead);
showmessage(PChar(Format('Handle=%d,Title=%s', [vWindow, vBuffer])));
end;
finally
VirtualFreeEx(vProcess, vPointer, 0, MEM_RELEASE);
CloseHandle(vProcess);
end;
end;
按钮控件换成时间控件
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;type
TForm1 = class(TForm)
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
uses CommCtrl;procedure TForm1.Timer1Timer(Sender: TObject); var
vHandle: THandle;
vCount: Integer;
vProcessId: Longword;
vProcess: THandle;
vPointer: Pointer;
vBuffer: array[0..255] of Char;
vNumberOfBytesRead: Longword;
I: Integer;
vTBBUTTON: TTBButton;
vWindow: THandle;
begin
vHandle := FindWindow('Shell_TrayWnd', nil);
vHandle := FindWindowEx(vHandle, 0, 'ReBarWindow32', nil);
vHandle := FindWindowEx(vHandle, 0, 'MSTaskSwWClass', nil);
vHandle := FindWindowEx(vHandle, 0, 'ToolbarWindow32', nil);
if vHandle = 0 then Exit;
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_GETBUTTON, i, Integer(vPointer));
ReadProcessMemory(vProcess, vPointer, @vTBBUTTON,
SizeOf(TTBButton), vNumberOfBytesRead);
if vTBBUTTON.fsStyle = 170 then Continue; // 组按钮
ReadProcessMemory(vProcess, Pointer(vTBBUTTON.dwData), @vWindow,
SizeOf(Integer), vNumberOfBytesRead);
SendMessage(vHandle, TB_GETBUTTONTEXT, i, Integer(vPointer));
ReadProcessMemory(vProcess, vPointer,
@vBuffer[0], SizeOf(vBuffer), vNumberOfBytesRead);
showmessage(PChar(Format('Handle=%d,Title=%s', [vWindow, vBuffer])));
end;
finally
VirtualFreeEx(vProcess, vPointer, 0, MEM_RELEASE);
CloseHandle(vProcess);
end;
end;end.
请看二楼