Avatar billede hatecaps Nybegynder
09. august 2005 - 09:10 Der er 14 kommentarer og
1 løsning

fange tekstfelt i fremmed programs vindue v.h.a handle

hejsa,

jeg har et handle til et vindue i et fremmed program. I dette vindue findes en tekstboks hvis handle jeg skal bruge. Vinduet har 2 tekstfelter, og det eneste jeg ved på forhånd der adskiller de to er at det ene har VScroll som en del af sin "Windows style" når man kigger i WinSight. Jeg kan desværre ikke bruge findwindow direkte, da jeg ikke ved på forhånd hvad feltets "navn" er.

Jeg går ud fra at jeg skal loope igennem hovedvinduets childs og tjekke på et eller andet. Men hvordan gør jeg det, og hvad er det jeg skal tjekke på

ha' det godt
hatecaps
Avatar billede rednex Nybegynder
09. august 2005 - 12:11 #1
Prøv at kigge på EnumChildWindows() i Windows API. I din callback kan du så bruge GetWindowInfo() til at hente en WINDOWINFO struct som indeholder oplysninger om Window Style. Den kan du bruge til at finde det rigtige tekstfelt. Hvis du skal bruge teksten i det felt kan du kigge på GetWindowText().
Avatar billede hatecaps Nybegynder
09. august 2005 - 12:39 #2
hej rednex,

jeg har fundet en anden løsning ved at bruge findwindowex og getwindowlong og så tjekke op imod WS-VSCROLL, men jeg er sikker på din løsning også ville virke, så smid et svar, så du kan få pointene.

Hvis du gerne vil yde lidt mere for dem ;) så kan du evt. svare på den her:

når jeg nu har et handle til tekstfeltet, så ville jeg meget gerne opfange messages sendt til det, så jeg kan redigere den nye tekst der bliver sendt til det, i stedet for hver gang at skulle redigere hele indholdet af feltet.

Har du nogen ide om hvordan jeg gør det ?
Avatar billede rednex Nybegynder
09. august 2005 - 12:57 #3
Hvis du skal opsnappe messages sendt til et andet vindue tror jeg du er nødt til at installere en global hook. Window proceduren til hooken skal så ligge i en DLL, ellers går det ikke. Jeg vil gerne lige prøve at undersøge om der er andre muligheder en den globale hook.

Må man spørge hvad det skal bruges til? Det ligner noget jeg har tænkt på at lave til at holde øje med en q3 console eller noget :o)
Avatar billede hatecaps Nybegynder
09. august 2005 - 13:03 #4
jeg tænkte nok at det var noget med hooks. Desværre er det eneste detaljerede eksempel jeg har set skrevet i c++ er lign.

Jeg skal bruge til at filtrere indholdet i et chat vindue i et net-spil program, hvor ejeren ikke selv gider administrere brugerne.

Hver gang en bruger poster en besked, må tekstfeltet jo modtage en besked om at tilføje en tekst til sit indhold. Hver post i chatten starter med brugernavn og licensnr, og det er den besked jeg gerne vil enten tillade eller afvise, alt efter licensnummeret.
Avatar billede hatecaps Nybegynder
09. august 2005 - 13:04 #5
nu vi er her, ved du så hvilken besked der skal sendes til feltet for at få den lodrette skrollbar til at gå i bund. Når jeg sender en SETTEXT message ryger skrollbaren op i toppen
Avatar billede rednex Nybegynder
09. august 2005 - 13:29 #6
Jeg har ikke fundet noget andet alternativ til en hook endnu (se i øvrigt SetWindowsHookEx()).

Med hensyn til at scrolle kan du sende en WM_VSCROLL til textboxen med SB_BOTTOM som wParam og handlet til boxen som lParam.
Avatar billede hatecaps Nybegynder
09. august 2005 - 14:05 #7
lige en detalje, lparam skal være 0, men ellers virker det rigtigt godt

tak fore hjælpen :)
Avatar billede rednex Nybegynder
09. august 2005 - 14:14 #8
Ja, du her ret. Jeg fik læst lidt for hurtigt :o) Har du styr på hooken eller skal du ha' en hånd med den også?

Og tak for point forresten :o)
Avatar billede hatecaps Nybegynder
09. august 2005 - 14:31 #9
det var så lidt :)

jeg vil meget gerne have noget hjælp med en hook, da jeg aldrig har lavet sådan noget før.

Du behøver dog ikke haste med det, jeg har fået den anden metode til at virke "så nogenlunde", man når af og til at se hvad en spærret bruger skriver inden det fjernes. Det skal en hook meget gerne kunne løse når vi når så langt. Men giv dig bare god tid ;)
Avatar billede rednex Nybegynder
09. august 2005 - 16:09 #10
Jeg begyndte at skrive lidt, men så blev jeg sgu doven :o) Jeg har googlet et par links der skulle få dig igang:

http://delphi.about.com/library/bluc/text/uc063001a.htm <-- Keyboard hook, hent sourcen, så er du godt igang.

http://www.experts-exchange.com/Programming/Programming_Languages/Delphi/Q_20818757.html  <-- Knapt så meget forklaring, men den viser hvordan du dropper messages.

Du skal nok bruge en hook med typen WH_GETMESSAGE for at kunne fange en WM_SETTEXT og forhindre den i at komme videre. For at filtrere en besked fra skal din hook funktion  returnere 0 og IKKE kalde CallNextHookEx(). Alle andre beskeder kan klares med Result := CallNextHookEx(...);
Avatar billede hatecaps Nybegynder
09. august 2005 - 17:10 #11
ok, jeg kigger på sagen :) hvis jeg får problmer råber og skriger jeg ;)
Avatar billede borrisholt Novice
10. august 2005 - 08:24 #12
Helt ærlig venner .. Man kan da ikke vende ryggen til jeg bare et par måneder uden i laver ulykker ;o)

Hvorfor giver i ikke bare manden noget source code der kan ? Nå så må jeg jo gøre det :D

hatecaps og alle andre intresserede skriv mig en mail på jens@borrisholt.com , og spørg efter WinSpy så har jeg et lille projekt der kan det hele og meget mere ....

PS det er ikke nødvendig at hooke.

Jens B
Avatar billede rednex Nybegynder
10. august 2005 - 15:52 #13
Det lyder spændende, så jeg sender da også lige en mail :o)

Og velkommen tilbage :o)
Avatar billede borrisholt Novice
10. august 2005 - 22:08 #14
rednex>> Stil dig nu ike for store forventninger om jeg kommer tilbage som fast skribent... Var bare forbi for at kigge for at se om ikke snart der var en der ville overtage mit tidligere skriveri .. Men det lader ikke til at være tilfældet.

Det er mest af alt på grund af spørgsmål som dette jeg ikke gidder mere :
http://www.eksperten.dk/spm/635130

Jens B
Avatar billede rednex Nybegynder
10. august 2005 - 23:17 #15
Det er en af grundene til at jeg kun besvarer ganske få spørgsmål herinde. Jeg har rimelig hårde kriterier for hvilke spørgsmål jeg gider svare på. Det betyder som regel at det skal være lidt "specielt" ligesom dette spm :o) Det er jo en god anledning til måske at lære lidt selv.

Fik du forresten min mail?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester