AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Undokumentierter Sendmessage-Befehl
Thema durchsuchen
Ansicht
Themen-Optionen

Undokumentierter Sendmessage-Befehl

Ein Thema von PinkFloydFan · begonnen am 4. Sep 2011 · letzter Beitrag vom 6. Sep 2011
Antwort Antwort
Seite 3 von 4     123 4      
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#21

AW: Undokumentierter Sendmessage-Befehl

  Alt 5. Sep 2011, 23:49
ReadProcessMemory ... Was denkst du, wie ich den Speicher rüberkopiere?
Aber das Problem hierbei ist, erstmal rauszubekommen wo sich was befindet.

Es gibt eben keine direkte statische Zuordnung zwischen Handle (HWND) und TControl ... ist alles schön dynamisch und schön verschachtelt.
Und beim TLabel gibt es noch nichtmal ein Handle, weswegen man sich dort durch noch mehr verschachtelungen wurschteln muß.
Bei den anderen Controls kann man ja leicht an den Text kommen, da sich das HWND suchen und dann über die WinAPI (z.B. WM_GETTEXT) dieser auslesen läßt, aber z.B. dem TLabel kannst du keine Message schicken.

Wenn ich dir eine hochauflösende Luftaufnahme von Europa gebe, dann wirst du es dennoch schwer haben mich darauf zu finden.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 5. Sep 2011 um 23:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von PinkFloydFan
PinkFloydFan

Registriert seit: 4. Dez 2007
Ort: Straubing
54 Beiträge
 
Delphi 2010 Architect
 
#22

AW: Undokumentierter Sendmessage-Befehl

  Alt 6. Sep 2011, 08:07
Guten Morgen liebe Delphi-Gemeinde!


@ Himitsu:

Tja, das ist das Ergebnis wenn der Scheffe solche Sachen nur einem einzigen Mann
überlässt, weil er Zitat "Vollstes Vertrauen" hat. Ubd der hat das Programm mehr oder
weniger in seiner Freizeit gecodet, womit es eigentlich kein Firmeneigentum ist..
Tja, und dann kommt da noch ne Frau ins Spiel.. Die des Programmierers.
Den Rest kann man sich ja dann wohl denken..

Dein Programm Form5 ist ja die Wucht, aber so richtig weiterhelfen tuts mir eigentlich nicht

Wozu dienen die Komponenten auf Panel1??


Ich hab gestern auf Maloche das Proggie mit nem Resource-Viewer
(nicht mit ResHacker, wie von Morphie vorgeschlagen, weil der abstürzte,
wenn ich die betreffende Form öffnen wollte sondern mit XN Resource Editor)
gecheckt, und jetzt kommts noch schlimmer:

Das was ich für Labels hielt, sind in Wirklichkeit TDBText Objekte... die haben ja keine Caption oder nen Text..

bim momentan etwas ratlos und kurz vorm aufgeben.....

glaube ich brauche bald mal nen Reset

Obigen Quelltext von Sirius hab ich etwas abgewandelt, und man kann damit tatsächlich sämtliche Labels (wenn der Name bekannt ist) auslesen..

Aber jetzt gehts plötzlich um TDBText...

Edit:
Hab grade festgestellt daß TDBText doch ne Caption haben... lässt sich schreiben und lesen.
Taucht nur nicht in der OH auf..

Geändert von PinkFloydFan ( 6. Sep 2011 um 08:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#23

AW: Undokumentierter Sendmessage-Befehl

  Alt 6. Sep 2011, 08:54
Ubd der hat das Programm mehr oder
weniger in seiner Freizeit gecodet, womit es eigentlich kein Firmeneigentum ist..
Kommt auf die Vereinbarung an, die getroffen wurde.

Zitat:
Tja, und dann kommt da noch ne Frau ins Spiel.. Die des Programmierers.
Den Rest kann man sich ja dann wohl denken..
Ich weiß jetzt nicht, was die frau mit dem Problem zu tun hat und denken, kann ich mir da jetzt auch nichts unbedingt.

Davon mal abgesehen, was versucht du eigentlich zu erreichen? Eventuell gibt es ja eine bessere Möglichkeit.

Viele Grüße, BruceSpringsteenFan.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#24

AW: Undokumentierter Sendmessage-Befehl

  Alt 6. Sep 2011, 09:03
Aber jetzt gehts plötzlich um TDBText...

Edit:
Hab grade festgestellt daß TDBText doch ne Caption haben... lässt sich schreiben und lesen.
Taucht nur nicht in der OH auf..
TDBText ist doch nur ne Ableitung von TCustomLabel. Also müsste alles was für ein Label funktioniert auch für DBTExt klappen.


Viele Grüße, NKOTBFan
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von PinkFloydFan
PinkFloydFan

Registriert seit: 4. Dez 2007
Ort: Straubing
54 Beiträge
 
Delphi 2010 Architect
 
#25

AW: Undokumentierter Sendmessage-Befehl

  Alt 6. Sep 2011, 09:14
Hallo Sirius!!
Von dir stammt also dieses schöne Stückchen Code!!

Ich hoffe du hast nichts dagegen dass ich dein geistiges Eigentum in mein Proggi einbaue?? *liebfrag*

Wie kommt man auf sowas bzw. woher hast du solche Informationen??


edit: @Luckie (sorry):

Frau des Prgrammierers---Scheffe > Bett > Programmierer sauer > Programmierer will sich rächen usw usw usw

Edit: Aber das erzählt man sich nur so.. gerüchteweise...



Ich hab Sirius' Code mal mit DBText probiert, und es funzt!!
Wichtig dabei ist nur, dass der Name des Labels exakt stimmt, d.h. auch Groß- und Kleinschreibung!!

Meine Quick and Dirty Lösung kann ich ja mal anhängen, wenn Interesse daran besteht..

Geändert von PinkFloydFan ( 6. Sep 2011 um 09:30 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#26

AW: Undokumentierter Sendmessage-Befehl

  Alt 6. Sep 2011, 09:34
Klar kannst du das verwenden.
(Außerdem gehört alles hier um Forum Cheffe. Der Braucht das angeblich für seine Weltherrschaft)

Mein Code-Beispiel, mit dem ich das gelernt habe, kam seinerzeit von Hagen:
http://www.delphipraxis.net/11550-su...t-das-net.html

Veröffentlichen wäre nicht schlecht. Du hast ja wahrscheinlich auch hier und da noch etwas geändert.

Aber wie oft, willst du derartig "schmutzige" Tricks noch anwenden. Du brauchst doch sicher mehr als ein TDBText.Caption aus dem anderen Programm. Willst du nicht vielleicht doch schauen, ob du bspw. die SQL-Abfragen mit dem Ressourcen-Hacker rausbekommst.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von PinkFloydFan
PinkFloydFan

Registriert seit: 4. Dez 2007
Ort: Straubing
54 Beiträge
 
Delphi 2010 Architect
 
#27

AW: Undokumentierter Sendmessage-Befehl

  Alt 6. Sep 2011, 09:52
Also dann:

Aber wiegesagt: Quick'n Dirty..

Delphi-Quellcode:
unit readlabel;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, DBCtrls;

const mymsg=WM_User+1;

type TSearchtype=(sClassName,sName,sCaption);
type PMemory=^TMemory;
     TMemory=packed record
       Thread:array[0..1023] of char;
       Postmessage:function(wnd:hwnd;msg,wparam,lparam:cardinal):bool;stdcall;
       exitthread:procedure(exitcode:integer);stdcall;
       getwindowlong:function(wnd:hwnd;index:integer):cardinal;stdcall;
       watchwnd:hwnd;
       backwnd:hwnd;
       backmsg:integer;
       count:integer;
       SearchType:TSearchtype;
       vgl:array[0..31] of char;
       vgllength:integer;
     end;
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label4: TLabel;
    Edit3: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    DBText1: TDBText;
    Button3: TButton;
    Label3: TLabel;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure GetMyCaption(var msg:TMessage);message mymsg+1;
    procedure Button3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    myhandle:hwnd;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


function injectThread(memory:Pmemory):integer; stdcall;
var pi,p,pm:ppointer;
    i,a:integer;
    c:pchar;
    left,top,width,height:smallint;
    same:boolean;
    wparam,lparam:cardinal;
begin
  wparam:=0;
  lparam:=0;
  p:=pointer(memory^.getwindowlong(memory^.watchwnd,gwl_wndproc)+9);
  pm:=pointer(integer(p^)+16);
  for a:=0 to pinteger(integer(pm^)+8)^-1 do
  begin
    p:=pointer(integer(pm^)+4);
    p:=pointer(integer(p^)+4*a);
    pi:=p;
    p:=pointer(integer(p^)+8);
    p:=p^;
    c:=pchar(p);
    if (pbyte(p)^=memory^.vgllength)or(memory^.SearchType in[sName,sCaption]) then
    begin
      if memory^.SearchType=sClassName then inc(c);
      same:=false;
      for i:=1 to memory^.vgllength do
      begin
        if memory^.vgl[i-1]<>c^ then break;
        same:=i=memory^.vgllength;
        inc(c);
      end;
      if same then
      begin
        dec(memory^.count);
        if (memory^.count=0)or(memory^.SearchType in [sName,sCaption]) then
        begin
          if memory^.SearchType=sCaption then
          begin
            p:=pointer(integer(pi^)+$64);
            wparam:=cardinal(p^);
            c:=pchar(p^);
            while c^<>#0 do
            begin
              inc(c);
              inc(lparam);
            end;
            inc(memory^.backmsg);
          end;
          break;
        end;
      end;
    end;
  end;
  memory^.Postmessage(memory^.backwnd,memory^.backmsg,wparam,lparam);
  result:=0;
  memory^.exitthread(0);
end;

procedure endpoint;
//ohne Funktion nur zum finden des Address-endes von injcetThread
asm
nop
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  close;
end;

procedure TForm1.Button1Click(Sender: TObject);
var mem:TMemory;
    lib:THandle;
    size:integer;
    process:cardinal;
    processid:cardinal;
    procmem:PMemory;
    tmp:cardinal;
    threadID:cardinal;
    thread:THandle;
    help:string;
    k:Integer;
begin
  try
    myhandle:=strtoint(Edit1.Text);
  except
    myhandle:=findwindow(nil,PChar(Edit1.Text));
  end;
  if myhandle=0 then exit;
  mem.backwnd:=self.Handle;
  mem.backmsg:=mymsg;
  mem.watchwnd:=myhandle;
  mem.count:=6;
  mem.vgl:='';
  help:=Edit2.Text;
  for k:= 0 to Length(Help) do mem.vgl[k-1]:=help[k];
  mem.vgllength:=Length(Help);
  mem.SearchType:=sCaption;
  size:=integer(@endpoint)-integer(@injectThread);
  move(injectthread,mem.thread,size);
  lib:=getmodulehandle('user32.dll');
  mem.Postmessage:=getprocaddress(lib,'PostMessageA');
  mem.getwindowlong:=getprocaddress(lib,'GetWindowLongA');
  lib:=getmodulehandle('kernel32.dll');
  mem.exitthread:=getprocaddress(lib,'ExitThread');
  getwindowthreadprocessid(myhandle,@processid);
  process:=openprocess(PROCESS_ALL_ACCESS,false,processid);
  procmem:=virtualallocex(process,nil,sizeof(Tmemory),MEM_COMMIT,PAGE_EXECUTE_READWRITE);
  writeprocessmemory(process,procmem,@mem,sizeof(TMemory),tmp);
  thread:=createremotethread(process,nil,0,@procmem.thread,procmem,0,threadid);
  waitforsingleobject(thread,infinite);
  closehandle(thread);
  virtualfreeex(process,procmem,0,mem_decommit);
  closehandle(process);

end;

procedure TForm1.GetMyCaption(var msg:TMessage);
var process,processID,tmp:cardinal;
    s:string;
begin
  if myhandle=0 then exit;
  getwindowthreadprocessid(myhandle,@processid);
  process:=openprocess(PROCESS_VM_READ,false,processid);
  setlength(s,msg.LParam);
  readprocessmemory(process,pointer(msg.wparam),@s[1],msg.lparam,tmp);
  closehandle(process);
  Label4.Caption:= 'Caption von "'+Edit2.Text+'" in Fenster "'+Edit1.Text+'":';
  Edit3.Text:=s;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  edit3.Text:=dbtext1.Caption;
   
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  DBText1.Caption:='Test Xaverl';
end;

end.
Angehängte Dateien
Dateityp: zip readlabel.zip (283,7 KB, 2x aufgerufen)

Geändert von PinkFloydFan ( 6. Sep 2011 um 10:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#28

AW: Undokumentierter Sendmessage-Befehl

  Alt 6. Sep 2011, 10:13
TDBText ist zwar von TCustomLabel abgeleitet, aber holt sich den Text aus dem angehängten DataLink.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von PinkFloydFan
PinkFloydFan

Registriert seit: 4. Dez 2007
Ort: Straubing
54 Beiträge
 
Delphi 2010 Architect
 
#29

AW: Undokumentierter Sendmessage-Befehl

  Alt 6. Sep 2011, 10:21
Zitat:
(Außerdem gehört alles hier um Forum Cheffe. Der Braucht das angeblich für seine Weltherrschaft)
btw:

Ich hab letztes Jahr ne Weltreise gemacht..

Aber da fahr ich nicht mehr hin...
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#30

AW: Undokumentierter Sendmessage-Befehl

  Alt 6. Sep 2011, 10:40
TDBText ist zwar von TCustomLabel abgeleitet, aber holt sich den Text aus dem angehängten DataLink.
Jep, und wenn im DataLink das Ereignis onChange auftritt, wird automatisch Caption neu gesetzt. Und es scheint ja auch zu funktionieren.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 18:30 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