AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Edit einer Fremdanwendung füllen - Es will einfach nicht klappen
Thema durchsuchen
Ansicht
Themen-Optionen

Edit einer Fremdanwendung füllen - Es will einfach nicht klappen

Ein Thema von wadriller · begonnen am 15. Okt 2013 · letzter Beitrag vom 16. Okt 2013
Antwort Antwort
wadriller

Registriert seit: 25. Feb 2009
43 Beiträge
 
Delphi XE2 Professional
 
#1

Edit einer Fremdanwendung füllen - Es will einfach nicht klappen

  Alt 15. Okt 2013, 10:49
Hallo zusammen.

Seit gestern wühle ich mich durchs Forum und hab jetzt glaube alle Wege durch und nichts scheint zu klappen.

Relativ einfache Geschichte.

Ich habe ein kleines Programm welches ein Edit und 2 Buttons hat.

In das Edit will ich mit meinem Delphiprogramm etwas eintragen und einen Knopf drücken.

Soweit so klar.
Findwindow, FindwindowEx, Sendmessage klappen aber einfach nicht.

Den Findcode habe ich mir sowohl mal mit WinSpy als auch mit X-Spy generieren lassen.
Beim debuggen wird wohl auch ein Handle ermittelt aber das Sendmessage scheint trotzdem nicht zu gehen.

Hier mal der übersichtliche Code:

Code:
var
  wnd, cwnd: HWND;
begin
  wnd:=0;
  cwnd:=0;
  wnd := FindWindow('#32770', '');
  cwnd := FindWindowEx(wnd, 0, 'Edit', nil);

  if cwnd <> 0 then
  begin
    SendMessage(cwnd,WM_Settext,0,integer(pchar('12')));
  end;
end;
Bei WinSpy kann ich das Edit auswählen und auch via WinSpy füllen.
Nur per Delphi geht es irgendwie nicht.

Kann man eine Anwendung gegen "Fremdsteuerung" schützen ?

Wenn es hilft kann ich auch den Link zu der Exe posten die ich steuern will.
Gruß
Michael
  Mit Zitat antworten Zitat
wadriller

Registriert seit: 25. Feb 2009
43 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Edit einer Fremdanwendung füllen - Es will einfach nicht klappen

  Alt 15. Okt 2013, 13:15
OK.

Ich bin schon ein Stück weiter gekommen. Mittels dem Tool "Winspector" hab ich rausgefunden das die Klasse '#32770' wohl von allem möglichem verwendet wird und da vieles davon wohl auch ein Edit auf sich liegen hat findet man das falsche Handle.

Falls jemand sowas auch mal sucht. Hier meine aktuelle Lösung (aktuell noch mit "grafischer" Ausgabe).

Erstmal sich man sich alle Handle die es zur Klasse '#32770' gibt.
Und danach sucht man auf jedem der Handle nach einem "Indikator" ob man das richtige Fenster hat.
In meinem Fall liegt ein Label mit dem Programmnamen auf der Form

Code:
function EnumChildren(hwnd: HWND; lParam: LPARAM): BOOL; stdcall;
const
  SearchedClass = '#32770';
var
  ClassName: array[0..259] of Char;
begin
  Result := True;
  GetClassName(hwnd, ClassName, Length(ClassName));
  if ClassName = SearchedClass then
    TStrings(lParam).Add(IntTostr(hwnd));
end;

procedure Button2Click(Sender: TObject);
var
  Hauptwnd, Childwnd, EditWnD: HWND;
  i: Integer;
begin
  Hauptwnd:=0;
  Childwnd:=0;
  EditWND := 0;

  Memo1.Clear;
  Memo2.Clear;
// Erst suchen wir alle Handle die es gibt
  EnumChildWindows(Childwnd, @EnumChildren, UINT_PTR(Memo1.Lines));

// Jetzt schauen wir auf welchem das Label liegt woran man festmachen kann das es das richtige Fenster ist
  for I := 0 to Memo1.Lines.Count -1 do begin
    Childwnd := FindWindowEx(strtoint(Memo1.Lines[i]),0,'Static','Inhalt des Labels');
    if Childwnd <> 0 then begin
      Memo2.Lines.Add(Memo1.Lines[i]);
      Childwnd := 0;
      break;
    end;
  end;

// Wenn wir jetzt ein Fenster gefunden haben, suchen wir auf dem Fenster nach dem Edit
  if memo2.Lines.Count > 0 then begin
    EditWnd := FindWindowEx(strtoint(Memo2.Lines[0]),0,'Edit',0);
  end;

// Wenn wir was gefunden haben schreiben wir den Text rein
  if Editwnd <> 0 then
  begin
    SendMessage(Editwnd,WM_Settext,0,integer(pchar('12')));
  end;
end;
Gruß
Michael
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Edit einer Fremdanwendung füllen - Es will einfach nicht klappen

  Alt 15. Okt 2013, 13:52
Zitat:
#32770 = The class for a dialog box.
http://msdn.microsoft.com/en-us/libr.../ms633574.aspx
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 Luckie
Luckie

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

AW: Edit einer Fremdanwendung füllen - Es will einfach nicht klappen

  Alt 16. Okt 2013, 02:30
Such doch gleich nach dem Fenstertzitel.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


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:07 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