AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Welche unit wird benötigt?

Ein Thema von ghost007 · begonnen am 21. Dez 2007 · letzter Beitrag vom 24. Dez 2007
Antwort Antwort
Seite 2 von 3     12 3   
Benutzerbild von ghost007
ghost007

Registriert seit: 31. Okt 2005
Ort: München
1.024 Beiträge
 
Delphi 7 Personal
 
#11

Re: Welche unit wird benötigt?

  Alt 22. Dez 2007, 18:06
Zitat von bitsetter:
Versuche es mal so:
Delphi-Quellcode:
const
  BtnIndex= 2;
var
  TB: commctrl.TBBUTTONINFO;
begin
  ZeroMemory(@TB, SizeOf(TB));
  TB.cbSize := sizeof(TB);
  TB.dwMask := commctrl.TBIF_COMMAND;
  SendMessage(..., TB_GETBUTTONINFO, BtnIndex, Cardinal(@TB));
  SendMessage(..., TB_PRESSBUTTON, TB.idCommand, MAKELONG (1, 0));
Hi,
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
Christian
Es gibt möglich Dinge und unmöglich Dinge.
Für unmögliche braucht man lediglich etwas länger.
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Welche unit wird benötigt?

  Alt 22. Dez 2007, 19:01
Befindet sich die Toolbar denn überhaupt in deiner eigenen Anwendung?
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Benutzerbild von ghost007
ghost007

Registriert seit: 31. Okt 2005
Ort: München
1.024 Beiträge
 
Delphi 7 Personal
 
#13

Re: Welche unit wird benötigt?

  Alt 22. Dez 2007, 19:14
Zitat von bitsetter:
Befindet sich die Toolbar denn überhaupt in deiner eigenen Anwendung?
Hi,
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
Christian
Es gibt möglich Dinge und unmöglich Dinge.
Für unmögliche braucht man lediglich etwas länger.
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Welche unit wird benötigt?

  Alt 22. Dez 2007, 19:22
Dann weißt du ja selber warum die Fehlermeldung kommt.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: Welche unit wird benötigt?

  Alt 22. Dez 2007, 19:26
In einer Fremdanwendung ist das nur unwesentlich komplizierter:
Delphi-Quellcode:
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;
Das Prozess-Handle erfährst du mithilfe von GetWindowThreadProcessId.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von ghost007
ghost007

Registriert seit: 31. Okt 2005
Ort: München
1.024 Beiträge
 
Delphi 7 Personal
 
#16

Re: Welche unit wird benötigt?

  Alt 23. Dez 2007, 00:29
Hi,
hab das ma einfach zum testen reinkopiert.

Delphi-Quellcode:
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;
An der gekennzeichneten stelle bekomm ich einen error: "Types of actual and formal var parameters must be identical"

MfG - Ghost007
Christian
Es gibt möglich Dinge und unmöglich Dinge.
Für unmögliche braucht man lediglich etwas länger.
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#17

Re: Welche unit wird benötigt?

  Alt 23. Dez 2007, 00:54
Delphi-Quellcode:
var
  BytesW: cardinal;
begin
  WriteProcessMemory(ProcessHandle, p, @TB, SizeOf(TB.cbSize) + SizeOf(TB.dwMask), BytesW);
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Benutzerbild von ghost007
ghost007

Registriert seit: 31. Okt 2005
Ort: München
1.024 Beiträge
 
Delphi 7 Personal
 
#18

Re: Welche unit wird benötigt?

  Alt 23. Dez 2007, 01:00
Hi,
haut mir immer noch ne fehlermeldung raus bei dem fremden programm und beendet es.

MfG - Ghost007
Christian
Es gibt möglich Dinge und unmöglich Dinge.
Für unmögliche braucht man lediglich etwas länger.
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#19

Re: Welche unit wird benötigt?

  Alt 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
  Mit Zitat antworten Zitat
Benutzerbild von ghost007
ghost007

Registriert seit: 31. Okt 2005
Ort: München
1.024 Beiträge
 
Delphi 7 Personal
 
#20

Re: Welche unit wird benötigt?

  Alt 23. Dez 2007, 12:12
Hmmm,
jetzt bekomm ich zwar keinen error mehr, jedoch drückt er den button aber auch nicht

MfG - ghost007
Christian
Es gibt möglich Dinge und unmöglich Dinge.
Für unmögliche braucht man lediglich etwas länger.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz