Avatar billede Slettet bruger
02. august 2008 - 18:27 Der er 13 kommentarer og
2 løsninger

Læse tekst fra andre vinduer?

Hej eksperter,

Hvordan kan man lettest læse tekst fra andre vinduer med C#? Hvis jeg f.eks. har behov for at finde tegnet efter første forekomst af strengen "Spørgsmål & Sva" (skulle gerne give 'r' for en browser med Eksperten åbnet). Kan man hente indholdet af Labels, noget lignende, eller skal man analysere skærmbilledet pixel for pixel? Vejledning søges!
Avatar billede wanze Nybegynder
02. august 2008 - 19:07 #1
Du får nok svært ved at læse indholdet af andre vinduer, men det må vel være at finde i rammene et eller andet sted.
Avatar billede driis Nybegynder
02. august 2008 - 19:25 #2
Et top-level vindue i Windows består af flere små undervinduer, og hver control i Win32 eller Windows Forms er et vindue. Disse har alle en text og er unikt identificeret ved et window handle (hWnd). Der findes en Win32 funktion, GetWindowText, som returnerer texten for et vindue, som du kan bruge i C# vha. DllImport.

Dvs. teoretisk er din opgave blot at finde det rigtige hWnd, og bruge GetWindowText. Det svære er selvfølgelig at finde det rigtige hWnd, da der typisk vil være rigtig mange forskellige (idet alle visuelle elementer typisk har et hWnd). Prøv at starte Spy++ (er en del af Visual Studio, mener den kommer med per default hvis du har installeret C++ compileren); så kan du se hvilke vinduer der findes på dit system netop nu.

NB! Ovenstående gælder i øvrigt ikke for WPF programmer ;-)
Avatar billede Slettet bruger
02. august 2008 - 19:47 #3
Det lyder avanceret. Lad mig lige se, om jeg har forstået det:
Jeg skal finde det specifikke handle til det ønskede vindue, hvorefter jeg har direkte adgang til al tekst i vinduet? Hvordan virker det mere præcist? Jeg kikker lige på Spy++.
Avatar billede brian0905 Nybegynder
03. august 2008 - 15:18 #4
Windows Programmer: Du skal finde dit vindue ud fra en overskrift eller dit handle (søg på C# og FindWindow) så har du adgang til alle top level vinduer i det andet program. Der er andre vinduer i et program, fx knapper, tekstbokse mv. men det er lidt mere specielt da de er ejet af processen og alle top level vinduer. For at komme til dem skal du injecte en dll ind i processen og subclasse det vindue du vil have, så kan du komme til dets funktionalitet. Hvis det er en mere speciel kontrol du subclasser er det ikke sikkert du kan komme til dets skrive metoder. I det til fælde skal du have overstyret funktionerne "GdiDrawText, DrawText, DrawTextEx" og ti ldette formål skal du bruge Detours biblioteket fra Microsft...

Web: Brug en WebClient eller lignende klasse og parse HTML
Avatar billede Slettet bruger
04. august 2008 - 08:55 #5
Hmm... Faktisk tror jeg, jeg kan klare mig med læsning af kildekoder til HTML-sider. Lige te øjeblik.
Avatar billede Slettet bruger
04. august 2008 - 09:13 #6
Ok. Hvordan kan jeg så med C# "besøge" en hjemmeside? Altså f.eks. bede om at få Eksperten.dk (som I en browser) og få en streng med den kildekode, serveren ville have sendt, hvis klienten havde været en browser? Dvs. lade server tolke serverside scripts osv. inden afsending.
Avatar billede casualty Nybegynder
04. august 2008 - 10:39 #7
Du skal bruge .Net´s webrequest:

WebRequest request = WebRequest.Create ("http://www.exp.dk");
HttpWebResponse response = (HttpWebResponse)request.GetResponse ();
Stream dataStream = response.GetResponseStream ();
StreamReader reader = new StreamReader (dataStream);
         
string responseFromServer = reader.ReadToEnd();
Console.WriteLine (responseFromServer);

(Grabbet fra http://msdn.microsoft.com/en-us/library/system.net.webrequest.aspx)
Avatar billede Slettet bruger
04. august 2008 - 10:45 #8
Uhh, nu begynder jeg snart at savle :) Det lyder sgu lækkert! Jeg kikker lige på det om snart.
Avatar billede Slettet bruger
05. august 2008 - 16:49 #9
Duh, duh, duh... Nu bliver det spændende. Hvad gør jeg med sessions og simulerede klik på links? Jeg ved godt, det kommer langt fra det oprindelige spørgsmål, så du siger bare til, hvis jeg skal oprette et nyt :P
Avatar billede Slettet bruger
14. august 2008 - 10:40 #10
Nå. Det sagde I slet ikke noget til overhovedet. Kunne I ikke smide nogle svar så?
Avatar billede brian0905 Nybegynder
14. august 2008 - 12:29 #11
Automatiserede kliks på links er ligetil du skal bare automatisere din Internet Explorer, prøv at se det her link http://www.codeproject.com/KB/cs/automatinginternetexplore.aspx
Avatar billede casualty Nybegynder
18. august 2008 - 12:18 #12
Jeg behøver ingen points, ellers tak :)
Avatar billede Slettet bruger
18. august 2008 - 14:39 #13
Så mangler vi bare driis...
Avatar billede driis Nybegynder
18. august 2008 - 18:23 #14
Svar her.

Ang. de simulerede links, så er det jo ikke andet end at tage den URL der måtte stå i href på a tags du kan finde i markuppen, og rette et HttpWebRequest mod den. Så kan du få fat i det information der linkes til. Du kan sikkert bruge en regular expression til at finde de links du måtte være interesseret i.
Avatar billede Slettet bruger
18. august 2008 - 20:10 #15
Mange tak :) Jeg kikker muligvis på det, når jeg får rystet nogle af mine andre projekter af mig.
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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