Programm hat keine ChildWindows, brauch aber trotzdem nen Text, der drauf steht
-
Hi Leute,
Ich hab hier n derbes Problem:
Es gibt Mixing-Software für den PC (zb Traktor DJ Studio oder AtomixMP3). So, jetzt wollte ich n kleines Tool für die DJs eines Internetradios schreiben, welches automatisch die Liedtitel in nen IRC-Channel postet. Naja, das posten in den IRC-Channel is kein Problem, aber das rausfinden des Liedtitels. Beide Programme haben keine ChildwindowsDas heisst, ich kann nicht einfach per EnumChildWindows auf das Editfeld zugreifen, in dem der Liedtitel steht. Die scheinen alles komplett selber zu zeichnen. Jedenfalls würde es mich interessieren, ob ihr ne Ahnung habt, wie ich an die Liedtitel kommen könnte.
-
IMO brauchst Du dafür OCR (Optical Character Recognition), einfach mal danach googeln.
http://altmark.nat.uni-magdeburg.de/~jschulen/ocr/index.html
-
uff. Meinst net, dass das auch anders gehen kann? OCR.
-
Kannst Du nicht evtl. auf den ID-Tag der mp3's zugreifen, die grad abgespielt werden? Sofern es mp3's sind, natürlich...
-
Und woher soll ich wissen, welche grad abgespielt werden?
-
Was stört dich denn an OCR?
:p
Andere wege gibts sicher.. ob du die aber als einfacher betrachtest hängt von dir ab...
- Leite die ReadFile-calls in der kernel32.dll die das prog macht auf dein Programm um und du bekommst so mit wo er grad rausließt (die frage ist jetzt nur ob da nicht an mehrere Files gleichzeitig gebastelt wird)
- Leite die DrawText/TextOut - calls auf dein Prog um und versuche mitzukriegen wann der Titel gemalt wird.
- Die h4ck0rx methode: Starte das ding in ne debuger und suche nach dem aktuellen Title im Prozess-speicher und bete dass es der String immer an der selben stelle auftaucht...
........ wie gesagt.. als einfach würde ich das Zeug nicht grad bezeichnen :p
-
oh shit
Das OCR-Teil von Kings Link hat irgendwie net so dolle
Zumindest hab ichs net hinbekommen ...
-
Naja - ich würde mir mal ein GameTrainer Tutorial durchlesen. Oder vlt. hast du sogar Glück und die Adresse wo der Liedtext steht ändert sich nicht (Nachschauen kann man mit nem universellen GameTrainer - wo man sich den Speicher auslesen kann).
-
Hast du vielleicht grad so nen universellen GameTrainer zur Hand?
Ausserdem: Ich hab zum Testen beispielsweise nur die Demoversion, bei der Vollversion kann das ja gleich wieder an ner ganz anderen Stelle liegen. Bei ner neueren Version auch usw ...
-
dEUs schrieb:
Hast du vielleicht grad so nen universellen GameTrainer zur Hand?
Nur einen der aber nur unter Win9x Systemen geht.
dEUs schrieb:
Ausserdem: Ich hab zum Testen beispielsweise nur die Demoversion, bei der Vollversion kann das ja gleich wieder an ner ganz anderen Stelle liegen. Bei ner neueren Version auch usw ...
Was anders als mit ReadProcessMemory fällt mir aber nicht ein. Mit OCR könnte es ja auch Probleme geben,
da die Textposition sich ändern könnte. Oder unterstützt das Programm vlt. Plugins?
-
Eins unterstützt PlugIns, das andere net ...
-
Ich denke, die DrawText/TextOut Aufrufe zu hooken wäre noch das einfachste
sofern z.B immer ein "Titel: " davorsteht - sonst wird es schwierig zu wissen, was der Titel istOder eben ggf. das Verzeichnis mit den Musik-Files überwachen und dann ggf. selbst den Titel auslesen
btw: schon verwunderlich, dass manche einfach alles ins Hauptfenster zeichnen
- vielleicht wussten die Programmierer nicht, wie sie es anders funktioniert
-
flenders schrieb:
Ich denke, die DrawText/TextOut Aufrufe zu hooken wäre noch das einfachste
Mit SetWindowsHookEx? Damit kann man doch nur msgs hooken - dachte ich jdf.?
Oder gibt es da noch was anderes?flenders schrieb:
btw: schon verwunderlich, dass manche einfach alles ins Hauptfenster zeichnen
- vielleicht wussten die Programmierer nicht, wie sie es anders funktioniert
Schau dir mal von Office 2k/XP den Öffnen Dialog an. Dort wird auch so ziemlich alles selbergezeichnet (Buttons, ComboBox, Statics). War denen wahrscheinlich zu anstrengend ein Static zu erstellen - ka. .
-
Es geht hier um API-Hooking, das ist nochmal bissl was anderes
Du musst im Speicher der Anwendung die entsprechenden Funktionsaufrufe suchen und dann due Aufrufe einer eigenen Funktion in der DLL ersetzenm die dann im normalfall wieder die Orginalfunktion aufruft.
In "Windows Programmierung für Experten" von Jeffrey Richter gibt es da ein paar schöne Beispiele und es wird auch eine Klasse "entwickelt", die das ganze schön kapselt