Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: [VB6] Objektin nimi hwnd:n perusteella

JussiR [01.02.2008 13:00:40]

#

Moi

FindWindowEx APIlla voi etsiä otsikon ja objektin nimen perusteella hwnd.
Ja GetWindowText APIlla voi etsiä hwnd:ssä olevan tekstin.

Mutta kuinka voin etsiä hwnd:n objektin nimen?

Esim. notepadissa oleva textbox on nimeltään "Edit"

EDIT: Löydin GetClassName APIn.

Merri [01.02.2008 13:23:16]

#

Noin huomiona, tämän aihealueen hakuja voi helpottaa jos keskityt etsimään tietoa Win32 APIsta etkä rajoita hakuja vain VB6:een ja APIin :) Käytännössähän kyse on Windowsin perustason ohjelmoinnista, eikä niin paljoa VB6-ohjelmoinnista.

Eri asia tietty jos tahdot löytää nimenomaan jonkun VB6-esimerkin, tosin muiden kielien vastaavien katselusta ei koskaan haittaa ole.

JussiR [01.02.2008 13:50:39]

#

Nyt olis toinen kysymys.
GetText apilla saa "textbox"ien tekstit. Mutta miten saisin toisen sovelluksen comboboxin tai labeleiden tekstit, tai menun?

Merri [01.02.2008 14:00:45]

#

Se voikin olla tuskaisen paljon hankalampaa, toisista ohjelmista nappaaminen siis. Ensimmäinen ongelma tulee siitä, että jotkut ohjelmat saattavat piirtää suoraan itse: tällöin Windows ei saa samalla tavoin tietoonsa sitä, mitä ruudulla on. Labelit on esimerkiksi ihan vaan tekstiä joka piirretään suoraan ikkunaan, sille ei ole olemassa objektia. VB:ssä ne on vaan kyhätty sentapaisiksi, että ne olisivat, mutta todellisuudessa labelien teksti piirretään suoraan formille ilman välikäsiä tai mitään mistä tietoa kaivaa (paitsi prosessin muistista suoraan lukemalla: vaivalloista ja riskikästä).

Comboboxin ja valikkojen suhteen saattaa olla toivoa, mutta ongelmaksi voi nousta se, että prosessien välistä viestittelyä on rajoitettu tai estetty. Joskus jopa kokonaan. Käytännössä saattaa päätyä siihen, että tarvitsee C-kirjaston, joka injektoidaan sisään toiseen prosessiin, ja sen kautta luetaan tietoja toisesta ohjelmasta (koska sillä kirjastolla on pääsy siihen prosessiin ilman rajoituksia).

Nämä lähinnä tuomaan esille pyyntösi ongelmallisuutta. Varsinaisesti ongelmaan, SendMessagella saattaa saada jotain irti. En nyt muista varmasti mikä parametri sille piti syöttää, oliko CB_GETTEXT tai LB_GETTEXT tai muuta vastaavaa.

JussiR [04.02.2008 14:04:35]

#

Kokeilin äsken GetTextillä labelia. Avasin työpöydällä olevan kuvakkeen "Properties" ikkunan ja gettextillä näki että "Target location:" kohdassa luki "Target location:" vaikka se on Label. :O
Tai sitten ne ei ole labeleita, classname on "static".

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta