![]() |
Re: Welche unit wird benötigt?
Zitat:
wenn ich das so ausführe um es zu testen, natürlich ersetze ich die '...' du das handle. Dann bekomm ich bei der anwendung, die toolbar hat eine Fehlermeldung auf der ich auf "fehlerbericht senden" oder "nicht senden" klicken kann und die anwendung wird beendet. MfG - Ghost007 |
Re: Welche unit wird benötigt?
Befindet sich die Toolbar denn überhaupt in deiner eigenen Anwendung?
|
Re: Welche unit wird benötigt?
Zitat:
sorry irgendwie hatte ich das vorausgesetzt ... die toolbar ist in ner fremdanwendung ... hab mich schon gefragt wie das bei dir so einfach gehen soll ^^ ohne Alloc, etc. MfG - Ghost007 |
Re: Welche unit wird benötigt?
Dann weißt du ja selber warum die Fehlermeldung kommt.
|
Re: Welche unit wird benötigt?
In einer Fremdanwendung ist das nur unwesentlich komplizierter:
Delphi-Quellcode:
Das Prozess-Handle erfährst du mithilfe von GetWindowThreadProcessId.
var TB: Commctrl.TBBUTTONINFO; p: Commctrl.PTBBUTTONINFO;
begin p := VirtualAllocEx(ProcessHandle, nil, SizeOf(TB), MEM_COMMIT, PAGE_READWRITE); TB.cbSize := SizeOf(TB); TB.dwMask := CommCtrl.TBIF_COMMAND; WriteProcessMemory(ProcessHandle, p, @TB, SizeOf(TB.cbSize) + SizeOf(TB.dwMask), nil); SendMessage(..., TB_GETBUTTONINFO, BtnIndex, Cardinal(p)); ReadProcessMemory(ProcessHandle, p, @TB, SizeOf(TB), nil); SendMessage(..., TB_PRESSBUTTON, TB.idCommand, MAKELONG (1, 0)); VirtualFreeEx(ProcessHandle, p, 0, MEM_RELEASE); end; |
Re: Welche unit wird benötigt?
Hi,
hab das ma einfach zum testen reinkopiert.
Delphi-Quellcode:
An der gekennzeichneten stelle bekomm ich einen error: "Types of actual and formal var parameters must be identical"
procedure TForm1.Button4Click(Sender: TObject);
var TB: Commctrl.TBBUTTONINFO; p: Commctrl.PTBBUTTONINFO; ProcessHandle: THandle; begin ProcessHandle:=GetWindowThreadProcessID(wnd,nil); p := VirtualAllocEx(ProcessHandle, nil, SizeOf(TB), MEM_COMMIT, PAGE_READWRITE); TB.cbSize := SizeOf(TB); TB.dwMask := CommCtrl.TBIF_COMMAND; WriteProcessMemory(ProcessHandle, p, @TB, SizeOf(TB.cbSize) + SizeOf(TB.dwMask), nil);//HIER ERROR SendMessage(wnd, TB_GETBUTTONINFO, BtnIndex, Cardinal(p)); ReadProcessMemory(ProcessHandle, p, @TB, SizeOf(TB), nil); SendMessage(wnd, TB_PRESSBUTTON, TB.idCommand, MAKELONG (1, 0)); VirtualFreeEx(ProcessHandle, p, 0, MEM_RELEASE); end; MfG - Ghost007 |
Re: Welche unit wird benötigt?
Delphi-Quellcode:
var
BytesW: cardinal; begin WriteProcessMemory(ProcessHandle, p, @TB, SizeOf(TB.cbSize) + SizeOf(TB.dwMask), BytesW); |
Re: Welche unit wird benötigt?
Hi,
haut mir immer noch ne fehlermeldung raus bei dem fremden programm und beendet es. MfG - Ghost007 |
Re: Welche unit wird benötigt?
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; |
Re: Welche unit wird benötigt?
Hmmm,
jetzt bekomm ich zwar keinen error mehr, jedoch drückt er den button aber auch nicht :( MfG - ghost007 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz