![]() |
Png Grafik am Bildschirm suchen und Position ermitteln
Hallo, DP, habe mal wieder ein wenig Zeit für ein kleines Projekt.
Folgende Frage stellt sich mir: Ich habe 5 Grafiken (Png) vom Bildschirm ausgeschnitten (Eingabefelder und Buttons) und auf der Festplatte gespeichert. Nun möchte ich die Grafiken am Bildschirm suchen (nicht auf einer Form!) und meine Maus jeweils auf die Grafik am Bildschirm darauf oder auf das Eingabefeld positionieren. Wie stelle ich das an??? :gruebel: Go2EITS |
Re: Png Grafik am Bildschirm suchen und Position ermitteln
Was willst du denn damit anfangen? Bist du sicher, dass es dafür keinen besseren Weg gibt?
Wenn du sowas wirklich machen willst, müsstest du ein Bildschirmfoto machen und dann dort suchen. Du könntest z.b. auf dem Foto alle Pixel suchen, die die gleiche Farbe wie das Pixel links oben in einem deiner Ausschnitte. Dann überprüfst du, ob das Pixel rechts davon die gleiche Farbe hat wie das entsprechende Pixel auf deinem Ausschnitt usw. Sowas könntest du dann in einer doppelten Schleife abarbeiten lassen. Wenn du die Schleife bei nicht passenden Farben verlässt hast du dann nach einem kompletten Durchlauf dein Bild gefunden. Und allzu lange dürfte die Suche auch nicht dauern. |
Re: Png Grafik am Bildschirm suchen und Position ermitteln
Gerne sage ich Dir was ich machen möchte:
Ich suche das Feld "Wertpapierkennnummer" füge z. B. automatisch die Wertpapierkennnumer ein. Suche zweitens Button "Kurs holen" und lese dann den Kurs aus um diesen dann weiterzuverarbeiten. So ähnlich verfahre ich mit den anderen Feldern, die ich am Bildschrim suchen muss, die ich auslese oder beschreibe. Das wäre vielleicht eine bessere Lösung: Vielleicht sollte ich 2 oder 3 Referenzpunkte am Bildschirm suchen, um zu erkennen, ob die Seite auf dem Bildschirm liegt und von denen Vorhandensein ich meine Eingaben in tätige, denn von den Referenzpunkten sind die Positionen der Eingabefelder immer gleich. (Wenn ich dieselbe Auflösung und denselben Browser verwende, es wäre natürlich eine vorerst statische Lösung). :gruebel: |
Re: Png Grafik am Bildschirm suchen und Position ermitteln
Zitat:
Möchtest du vielleicht den Internet Explorer fernsteuern ? Oder um welche Anwendung handelt es sich ? Bei yahoo kann man sich übrigens Kursdaten als CSV-Daten herunterladen... |
Re: Png Grafik am Bildschirm suchen und Position ermitteln
Nein, es handelt sich "banal" um Daten auslesen, Buttons betätigen und Daten eingeben und absenden.
Yahoo.Kursdaten sind nicht realtime, sondern 15-20 Minuten verzögert, was die deutschen Werte betrifft. Die Lösung mit den Referenzpunkten halte ich für die Beste, aber was meint Ihr? |
Re: Png Grafik am Bildschirm suchen und Position ermitteln
Zitat:
Wenn schon, dann sucht man mit FindWindow() das Fenster der Anwendung. Danach sucht man die Childfenster (jeder Button und jedes Editfeld ist ein Childfenster). Wenn man diese Handles hat, dann kann man Text auslesen und reinschreiben und Button betätigen. Mit Bildverarbeitung hat das überhaupt nichts zu tun. Unter Windows Vista funktioniert das aus Sicherheitgründen aber nicht mehr... |
Re: Png Grafik am Bildschirm suchen und Position ermitteln
Vielen Dank für Deine Hilfe. Das mir dem Findwindow und die betreffende Seite auf dem Bildschirm in den Vordergrund zu bringen ist mir bekannt. Ich habe mich auf das Kernproblem beschränkt. Childfenster jedoch ist mir ein neuer Begriff. Ich versuche mal mit mit den Childs weiter zu kommen, ob ich nicht "direkt" die Eingaben, das Auslesen von Feldern und das Betätigen von Buttons vornehmen kann.
Mit den Bilder wollte ich nur die Position der Buttons, Eingabe- und "Auslesefelder" am Bildschirm suchen, um die Eingaben oder das Auslesen automatisch tätigen. Ein Bildbearbeitung ist/war daher nicht vorgesehen. Vielen Dank für die Hilfe! |
Re: Png Grafik am Bildschirm suchen und Position ermitteln
Liste der Anhänge anzeigen (Anzahl: 1)
Nachtrag: Aber so einfach scheint es nicht zu sein:
![]() ![]() und andere Threads ohne richtige Lösung. Vielleicht ist es einfach mit einem Tool die Classen zu bekommen, jedoch dieses Problem entsprechend zu programmieren, da bedarf es wohl eher fortgeschrittene Kenntnisse. Winspy++ und Winspector haben mir leider nicht weitergeholfen. So sehen übrigens die Felder aus: Edit: Neues Bild hochgeladen. |
Re: Png Grafik am Bildschirm suchen und Position ermitteln
Darf ich Fragen, was du planst? Ganz spontan tippe ich darauf, das du dir einen Bot bauen willst, der für dich bei einem Börsentippspiel antritt.
Wenn das so ist, könnte man das in der DP als Gemeinschaftsprojekt laufen lassen. (Falls ein größeres Team gegen Regeln verstoßen sollte, könnte man ja ausser Konkurrenz mitmachen) |
Re: Png Grafik am Bildschirm suchen und Position ermitteln
Nein, kein Börsenspiel. Die Eingaben sind real. Ich wäre froh, wenn ich an die Felder käme.
TWebbrowser könnte die Lösung sein. Mal sehen. :gruebel: |
Re: Png Grafik am Bildschirm suchen und Position ermitteln
Zitat:
Die Ausnahme sind Java-Programme; die kochen ihr eigenes Süppchen. Bei Delphi ist das Programm WinSight dabei. Vorgehensweise: Alle Programm bis auf das Zielprogramm beenden. WinSight starten. Das Hauptfenster in der Baumstruktur anklicken und dann "*" drücken um alles aufzuklappen. |
Re: Png Grafik am Bildschirm suchen und Position ermitteln
Eine andere Ausnahme sind Webseiten...
a: ![]() b: ![]() c: ![]() d: ![]() Grüße // Martin |
Re: Png Grafik am Bildschirm suchen und Position ermitteln
Shima: Ja, die Eingabemaske geht wohl über Java.
MSchäfer: Danke für die Hinweise! Ich suche noch ein Programm, dass mir die Felder anzeigt, damit ich in Twebbrowser damit arbeiten kann. Ich bin aber leider noch nicht weiter gekommen, bzw. konnte die Felder lokalisieren. Mir scheint meine erste Idee den Bereich auf dem Bildschirm mit Referenzpunkten zu suchen und mit einem simulierten Mausklick und simulierten Tastaturdruck auf zweiten Blick leichter zu sein als Java zu lernen. Allein die Suche nach den Feldern ist eher ein Ratespiel. Siehe auch ![]() Noch jemand eine Idee? :gruebel: |
Re: Png Grafik am Bildschirm suchen und Position ermitteln
Auf der Seite sind zwei Frames. Der 2. Frame hat folgende Objekte:
Code:
Also ist "searchfor" das primäre Eingabefeld.
Form1: searchform1
baseURL = [url]http://extis.dab-bank.com/dab_neu/aktieninvest/suchergebnis.html[/url] Type=hidden kat = Type=hidden spring = search Type=hidden wptyp = ALL Type=radio wptyp = CER Type=radio wptyp = STK Type=radio wptyp = FND Type=radio wptyp = BND Type=radio wptyp = WNT Type=radio wptyp = NEW Type=radio wptyp = DAB Type=radio searchfor = WKN, ISIN oder Name eingeben Type=text MaxLen=2147483647 |
Re: Png Grafik am Bildschirm suchen und Position ermitteln
So, ich habe weiter recherchiert und bin mit Twebbrowser wohl am richtigen Weg.
Nachfolgende Codeschnipsel habe ich gefunden, die aber nicht funktionieren (ich verwende D7). Quelle: ![]() Nachfolgende Vorgehensweise erscheint mir momentan sinnvoll: 1. Nummer der Form zu holen. 2. Alle Eingabefelder der Form holen und listen.
Delphi-Quellcode:
So fehlerfrei, wie der Autor schreibt, scheint der Code für D7 nicht zu sein.
function GetFormByNumber(document: IHTMLDocument2;
formNumber: integer): IHTMLFormElement; var forms: IHTMLElementCollection; begin forms := document.Forms as IHTMLElementCollection; if formNumber < forms.Length then result := forms.Item(formNumber,'') as IHTMLFormElement else result := nil; end; function GetFormFieldNames(fromForm: IHTMLFormElement): TStringList; var index: integer; field: IHTMLElement; input: IHTMLInputElement; select: IHTMLSelectElement; text: IHTMLTextAreaElement; begin result := TStringList.Create; for index := 0 to fromForm.length do begin field := fromForm.Item(index,'') as IHTMLElement; if Assigned(field) then begin if field.tagName = 'INPUT' then begin // Input field. input := field as IHTMLInputElement; result.Add(input.name); end else if field.tagName = 'SELECT' then begin // Select field. select := field as IHTMLSelectElement; result.Add(select.name); end else if field.tagName = 'TEXTAREA' then begin // TextArea field. text := field as IHTMLTextAreaElement; result.Add(text.name); end; end; end; end; //procedure TMyForm.Button1Click(Sender: TObject); // Original geändert procedure Form1.Button1Click(Sender: TObject); var document: IHTMLDocument2; theForm: IHTMLFormElement; index: integer; begin //Nachfolgend wird ein Fehler gezeigt: // document := TWebBrowser.Document as IHTMLDocument2; // und habe deshalb den Source abgeändert: document := WebBrowser1.Document as IHTMLDocument2; // und ab hier geht es bei mir nicht mehr weiter... theForm := GetFormByNumber(WebBrowser.Document as IHTMLDocument2,0); fields := GetFormFieldNames(theForm); for index := 0 to fields.count-1 do ShowMessage('Field ' + IntToStr(index) + ' called ' + fields[index]); end; Kann jemand weiterhelfen? |
Re: Png Grafik am Bildschirm suchen und Position ermitteln
Moin,
ich weiß, dass es unfair ist das anzusprechen, aber bist du dir sicher, dass du mit einem Bot zum Abfragen der Börsenkurse nicht gegen die AGB des Anbieters handelst. Wenn es so einfach wäre, warum gibt es dann noch teure Dienste wie ![]() Ich würde es mal prüfen, bevor du dich evtl. mit einer/deiner Bank anlegst.. :-) |
Re: Png Grafik am Bildschirm suchen und Position ermitteln
Liste der Anhänge anzeigen (Anzahl: 1)
@f.siebler
Ich denke, wenn ich über Sendkeys eine Order ausführe, über Twebbrowser die Felder ausfüllen lasse oder über meine Maus und Tastatur agiere, ist das unerheblich für die Bank, aber für mich schneller. Problematisch wird es sicherlich, wenn ich 100 Mal in der Minute Kurse abfrage. Wenn ich alle 5 Minuten eine Abfrage tätige, ist dies wohl unerheblich. Der Trafik bleibt in etwa gleich. Das Ziel ist nicht die Abfrage von x-Kursen in der Minute eines Wertpapiers. Wieder zum Problem: Ich habe den (fehlerhaften) Source beigefügt und verwende ein Beispiel, dass bei Yahoo einen Login ausfüllt und ausführt. Den Code zum auslesen der Felder habe ich integriert. Weil der ergänzende Code nicht compiliert wird, habe ich diesen im Code "auskommentiert". Ich hoffe, das hilft weiter. |
Re: Png Grafik am Bildschirm suchen und Position ermitteln
wenn es sich um eine simple webseite handelt ist TWebbrowser auch der falsche Weg. Denn wie es scheint brauchst du die visuelle Ausgabe im Webseitendesign nicht. Dementsprechen kannst du auch einfach die Webseite herunterladen, die Daten Parsen und dann die Daten wieder abschicken (posten)
|
Re: Png Grafik am Bildschirm suchen und Position ermitteln
@SirThornberry:
Nein, es ist eine Seite mit Javascript. Die Eingabefelder konnte ich nicht localisieren, daher mein Versuch über den obenstehenden Code. Siehe auch die Komplexität der Seite unter dem Login z. B. von der DAB-Bank: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:47 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