[C++] Text van scherm als String

Pagina: 1
Acties:

  • MaxxRide
  • Registratie: April 2000
  • Laatst online: 09-01 10:13
Mijn probleem is als volgt:

Ik heb een applicatie waarvan ik, middels een DLL, de text op een component moet bepalen. Deze text kan ik niet via de standaard WinGetText functie van windows ophalen, deze geeft simpelweg null terug.

Nu zit ik te denken in de volgende oplossingsrichting:
- Een soort OCR-achtige lib die voor een bepaalde rectangle op het scherm een string met de text teruggeeft
- ....

Kent iemand van jullie zo een library of hebben julli een idee hoe ik dit probleem op kan lossen dan hoor ik dat graag?

If you are not wiping out you are nog pushing enough...


  • Rowwan
  • Registratie: November 2000
  • Laatst online: 19:51
Meer uitleg nodig :?...

Je hebt dus een applicatie (ik neem aan zonder src code) waaruit je tekst wil uitlezen.. Waar moet deze tekst vandaan komen? Een editbox, een lijst, een bitmap?

  • MaxxRide
  • Registratie: April 2000
  • Laatst online: 09-01 10:13
Sorry, ik zal wat duidelijker zijn.

Het gaat om een automatische testtool. Deze identificeert componenten op een scherm d.m.v. het label dat links van een editbox staat. Voor de applicatie die we nu onder handen hebben kan deze testtool het label niet bepalen middels de standaard functionaliteit. Er moet dus een add-in worden geschreven. Deze add-in is in de vorm van een DLL.

De DLL moet nu het volgende doen. Van het meegegeven componentn (handle) bepaal je het component dat er 80 pixels rechts van staat. Dit component is een soort van label met een tekst erop. Deze tekst wil ik ophalen. Echter, dit lukt niet met de standaard windows api call "GetWindowText". Ik zal dus iets moeten hebben waaraan ik bepaalde coordinaten meegeef (van de schermpositie) dat de tekst kan bepalen op dit gebied.

Een soort OCR voor windows dus.

Ik hoop dat het nu wat duidelijker is.

If you are not wiping out you are nog pushing enough...


  • Pooh
  • Registratie: April 2001
  • Niet online

Pooh

Lees eens een boek

Dat klinkt allemaal wel uitermate ingewikkeld. Als je nu eens MS-Spy++ pakt, en de find window functie gebruikt, kun je dan wel je label uitlezen? Zoja, danweet je dat het in ieder geval via de API moet kunnen.

Overigens kun je volgens de MSDN GetWindowText helemaal niet gebruiken voor een andere applicatie. Ik weet even niet welke functie je wel zou moeten hebben.

  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
Vreemd. Static controls hebben als het goed is ook hun eigen window proc (in MFC zijn CStatic controls ook afgeleid van CWnd), en zouden dus een GetWindowText message moeten accepteren.

Heb je al eens geprobeerd om, in plaats van het static control van de 'echte' applicatie uit te lezen, zelf een simpel programmaatje te maken met een static control, en *die* vervolgens uit te lezen? Mocht dit niet lukken, dan kan je iig in beide applicaties kijken wat er precies gebeurt met je message.

Ik zou OCR-achtige toestanden echt als laatste oplossing zien, omdat het totaal niet flexibel is. Als iemand een groter lettertype heeft geconfigureerd, of als de volgende windows andere kleuren / anti-aliasing / whatever heeft, dan nekt dit je programma. En bovendien is het veel en foutgevoelig werk.

  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
Pooh schreef op vrijdag 20 mei 2005 @ 14:31:
Overigens kun je volgens de MSDN GetWindowText helemaal niet gebruiken voor een andere applicatie. Ik weet even niet welke functie je wel zou moeten hebben.
LOL, de MSDN handleiding. Goed punt, heel niet aan gedacht 8)7

GetDlgItemText() misschien?

Of, uit dezelfde GetWindowText-pagina: To retrieve the text of a control in another process, send a WM_GETTEXT message directly instead of calling GetWindowText :P

[ Voor 20% gewijzigd door MrBucket op 20-05-2005 14:41 ]


  • Pooh
  • Registratie: April 2001
  • Niet online

Pooh

Lees eens een boek

Ah, ik heb de oplossing gevonden. Statics uit VB zijn geen labels (hebben geen handle).

Er staat een nogal ranzige oplossing op experts exchange (even aanmelden):
http://www.experts-exchan...ual_Basic/Q_21018080.html

  • MaxxRide
  • Registratie: April 2000
  • Laatst online: 09-01 10:13
Het bovenstaande heb ik al geprobeerd. Bij een andere applicatie werkt het prima, echter bij de applicatie onder handen niet. Deze applicatie is geschreven in USOFT, schijnbaar maakt die eigen componenten aan. Deze accepteren de message dus niet. Ook met SPY++ en andere gelijkende programma's vind ik de tekst niet.

Ik krijg overigens wel een handle te pakken van het component.

If you are not wiping out you are nog pushing enough...


  • Rowwan
  • Registratie: November 2000
  • Laatst online: 19:51
VB :? Het gaat over VC
Als het allemaal niet lukt, probeer eens : www.simpleocr.com/Help.asp

[ Voor 135% gewijzigd door Rowwan op 20-05-2005 14:52 ]


  • Pooh
  • Registratie: April 2001
  • Niet online

Pooh

Lees eens een boek

Rowwan schreef op vrijdag 20 mei 2005 @ 14:50:
VB :? Het gaat over VC
Als het allemaal niet lukt, probeer eens : www.simpleocr.com/Help.asp
Zucht. Hij wil van een 3rd party programma een label uitlezen. Als dat programma in VB is geschreven (er staat nergens dat dat niet zo is) kun je de labels niet zomaar uitlezen, omdat ze geen handle hebben. Als 't in VC geschreven was zou dat wel kunnen. Waarmee hij zijn uitleesprogje schrijft staat er trouwens ook niet. C++ kan ook borland oid zijn.

OCR'er lijkt me wel een heel wanhopige oplossing, er moet iets beters zijn. Zie mijn linkje oa.

  • MaxxRide
  • Registratie: April 2000
  • Laatst online: 09-01 10:13
De DLL is geschreven in visual C++.

De doelapplicatie in USOFT (waar dat mee is geschreven is mij niet bekend).

De testapplicatie ondersteund diverse plug-ins onder andere voor JAVA, VB, Delphi applicaties etc. Echter niet voor deze applicatie, en ja ik ben dus redelijk wanhopig :(

If you are not wiping out you are nog pushing enough...


  • Pooh
  • Registratie: April 2001
  • Niet online

Pooh

Lees eens een boek

MaxxRide schreef op vrijdag 20 mei 2005 @ 15:06:
De DLL is geschreven in visual C++.

De doelapplicatie in USOFT (waar dat mee is geschreven is mij niet bekend).

De testapplicatie ondersteund diverse plug-ins onder andere voor JAVA, VB, Delphi applicaties etc. Echter niet voor deze applicatie, en ja ik ben dus redelijk wanhopig :(
Heb je die experts exchange link al geprobeerd? Die lijkt prima te werken, ook als spy++ het niet doet? :?

  • MaxxRide
  • Registratie: April 2000
  • Laatst online: 09-01 10:13
Volgens mij is die gemaakt voor een VB applicatie. Een soortgelijk mechanisme hebben we al eens geprobeerd. Toch zal ik nog eens kijken of het hiermee wel lukt.

If you are not wiping out you are nog pushing enough...


  • MaxxRide
  • Registratie: April 2000
  • Laatst online: 09-01 10:13
Helaas ook deze code heeft geen goed gevolg. Het werkt simpelweg niet.

If you are not wiping out you are nog pushing enough...


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Als de component een windowclass is, die de string via een callback ophaalt, dan kun je'm inderdaad niet zo maar uitlezen. Het klinkt dan als een reverse engineering uitdaging. Zie je in Spy++ een window op die plek? En wat staat er in de windowclass voor data?

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • MaxxRide
  • Registratie: April 2000
  • Laatst online: 09-01 10:13
De applicatie is van een klant dus ik heb helaas niet altijd om te testen (daarvoor moet ik naar hen toe). Welke stappen zouden moeten worden ondernomen?
Kijken welke class het is, en dan?

If you are not wiping out you are nog pushing enough...


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Kijken of de windowclass een pointer bevat naar de string. MSVC kan elk proces debuggen.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • MaxxRide
  • Registratie: April 2000
  • Laatst online: 09-01 10:13
Zoiets hadden we ook in gedachten. Er moet gewoon ergens een referentie naar een class zijn. Maar om dat allemaal op te zoeken ben je niet met een uurtje klaar ben ik bang. Ik hou het in gedachten.

edit:
Waar kan ik MSVC vinden?

[ Voor 10% gewijzigd door MaxxRide op 22-05-2005 22:25 ]

If you are not wiping out you are nog pushing enough...

Pagina: 1