Registriert seit: 17. Jan 2007
1.169 Beiträge
Turbo Delphi für Win32
|
Re: Welche unit wird benötigt?
23. Dez 2007, 09:24
Hallo,
bei mir funktioniert es jetzt:
Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var
TB: Commctrl.TBBUTTONINFO; p: Commctrl.PTBBUTTONINFO;
ProcessHandle, wnd: THandle;
BytesW, BytesR, ProcId: cardinal;
const
BtnIndex= 2;
begin
wnd:= ...;
GetWindowThreadProcessId(wnd, @ProcId);
ProcessHandle := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE, False, ProcId);
try
p := VirtualAllocEx(ProcessHandle, nil, SizeOf(TB), MEM_COMMIT, PAGE_READWRITE);
if Assigned(p) then
begin
TB.cbSize := SizeOf(TB);
TB.dwMask := CommCtrl.TBIF_COMMAND;
if WriteProcessMemory(ProcessHandle, p, @TB, SizeOf(TB.cbSize) + SizeOf(TB.dwMask), BytesW) and
(BytesW= SizeOf(TB.cbSize) + SizeOf(TB.dwMask)) then
if SendMessage(wnd, TB_GETBUTTONINFO, BtnIndex, Cardinal(p))<> 0 then
if ReadProcessMemory(ProcessHandle, p, @TB, SizeOf(TB), BytesR) and (BytesR= SizeOf(TB)) then
SendMessage(wnd, TB_PRESSBUTTON, TB.idCommand, MAKELONG (1, 0));
VirtualFreeEx(ProcessHandle, p, 0, MEM_RELEASE);
end;
finally
CloseHandle(ProcessHandle);
end;
end;
Gruß bitsetter
"Viele Wege führen nach Rom" Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
|
|
Zitat
|