jag har i SPY++ hittat den kontroll jag söker i en extern applikation jag inte har källkoden till. Den är av classtyp Edit. >Hur kan jag få tag på Edit kontrollens hwnd? Jo se där. Kontroll ID hade ingen aning om att det fanns något sådant. Kan du förklara vad de gör? Är de samma för alla instalationer av samma program vilken dator jag än kör det på? >Kan du förklara vad de gör? Går en sådan global hook att skapa i C# och vet du vart jag kan läsa mer om detta? Har sökt på goggle men inte hittat något. Vet inte om jag använde rätt sökord. Vet du någon C# bok som tar upp detta eller liknande? >Går en sådan global hook att skapa i C# Ok så detta är enda sättet att lösa det på alltså? Finns det inga motsvarigheter till global hook i C#? Kan du inte skriva själva hooken i C, och på nåt sätt föra över det till C#?Behöver lite tipps!!
Det jag vill göra med denna kontroll nu är att få ut texten ifrån den. Detta har nu medfört vissa problem som jag hoppas ni kan hjälpa mig med.
Edit kontrollen blir uppdaterad via en server. Den får sin data rad för rad. Varje gång som kontrollen uppdateras så har den fått en extra rad längst ner i Edit boxen.
Problem 1:
Hur kan jag få tag på Edit kontrollens hwnd?
Min ideé...
Parent windowen inehåller 3 st Edit kontroller dessa har inget unikt som identifierar dem då deras namn varierar. Det jag hade tänkt mig är att Enum igenom alla Edit kontroller och titta efter previous window för att där kunna avgöra vilken kontroll som är rätt då denna har en unik kontroll som previous.
Men hur kan man få fram previous window mha en hwnd?
(Previos window finns med i SPY++ om man väljer properties och sedan windows på ett window)
PROBLEM 2: Det svåraste!! ;)
Hur kan jag synkronisera min applikation med Editkontrollens uppdatering?
Min ideé...
Skapa någon typ av funktion som ligger och lyssnar effter ett WM_SETTEXT meddelande som kommer till denna kontroll. Sedan par den den sista raden ur detta WM_SETTEXT meddelande och lägger det i någon form av kö som jag kan hämta värdena ur och behandla.
Men hur vet jag att den garanterat fångar upp alla meddelanden av denna typen och inte missar några? Vad kallas den typ av funktion som behöver skapas, den behöver ju ligga och köra parallelt med min applikation hela tiden.
-------------------------------------------------------------------------------
Är mina ideér korrekta eller är det någon som har några andra förslag?
Någon som kan föreslå bra sökord på goggle eller har sett liknande artiklar på nätet?
Den externa applicationen är inte en .Net application
Tackar på förhand //HenrikSv: Behöver lite tipps!!
>Min ideé...
>Parent windowen inehåller 3 st Edit kontroller dessa har inget unikt som identifierar >dem då deras namn varierar.
Har de inte konstanta kontroll ID då? Om de har det kan du använda GetDlgItem.
>Hur kan jag synkronisera min applikation med Editkontrollens uppdatering?
Jag skulle använda pollning istället. Skicka WM_GETTEXT med jämna mellanrum och senda själv räkna ut vad som ändrats sen sist.
MSSv: Behöver lite tipps!!
Hur används GetDlgItem?
Vad menas med polling? Är det möjligt att göra på något annat sätt? Kunde vara roligt med något mer förslag för det kan bli riktigt svårt att avgöra vad som ändras?
SPY++ lyckas ju fånga upp alla WM_SETTEXT hur gör den det då?
Har hittat lite info om window hooks. Kan detta vara rätt sätt att angripa problemet och hur ska jag isf göra ;)
MVH HenrikSv: Behöver lite tipps!!
Fungerar bara som ett ID nummer för en kontroll.
>Är de samma för alla instalationer av samma program vilken dator jag än kör det på?
För det mesta är de det, men jag tror inte det är garanterat.
>Hur används GetDlgItem?
Du skickar in HWND för det fönster kontrollen ligger i och kontrollens ID, och får tillbaka kontrollens HWND.
>SPY++ lyckas ju fånga upp alla WM_SETTEXT hur gör den det då?
Använder en global hook tror jag.
MSSv: Behöver lite tipps!!
Vet du om det går att få reda på hur många rader text en Edit kontroll inehåller innan jag hämtar texten ifrån den?
Kan man isåfall bara specifisera så att man bara hämtar den sista raden eller måste man hämta hela texten och sedan plocka ut den sista raden?
MVH HenrikSv: Behöver lite tipps!!
Nej
>Vet du om det går att få reda på hur många rader text en Edit kontroll inehåller innan jag hämtar texten ifrån den?
Vore det inte enklare att bara hämta all text och sendan dela upp den i rader?
MSSv: Behöver lite tipps!!
Sv: Behöver lite tipps!!
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/Windowing/Hooks/UsingHooks.asp