Windows - Brug GetWindowText synkront

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forstår ikke helt hvordan GetWindowText kan arbejde for et vindue på samme tråd som den, der ringer op. Hvis GetWindowText blokerer, indtil meddelelsen behandles, hvordan kan tråden ringe DispatchMessage? 'er blevet blokeret indenfor GetWindowText. Betyder det at GetWindowText altid skal kaldes fra en separat tråd fra den ene, der bruger meddelelsessløjfen?

Bedste reference


GetWindowText er bare en tynd indpakning til SendMessage(WM\_GETTEXT).


Meddelelser sendt til et vindue behandles altid i den tråd, der oprettede vinduet (vinduer har 'tråd affinitet'). Sendte meddelelser går ikke igennem DispatchMessage, snarere GetMessage (eller PeekMessage eller MsgWaitForMultipleObjects) kalder vinduet proceduren direkte, for meddelelser sendt fra en anden tråd. Hvis meddelelsen sendes fra samme tråd, vil SendMessage kalde vinduet procedure.





Dokumentationen SendMessage siger: [18]



  Funktionen SendMessage kalder vinduesproceduren for det angivne vindue og vender ikke tilbage, før vinduet har behandlet meddelelsen.



Og GetMessage dokumentationen siger: [19]



  Henter en besked fra kaldetrådets meddelelseskø. Funktionen sender indgående sendte beskeder, indtil en udgivet besked er tilgængelig til hentning.



Fra PeekMessage docs: [20]



  Afsender indgående sendte meddelelser, kontrollerer trådmeddelelsekøen for en sendt meddelelse og henter meddelelsen (hvis der findes).






Opførelsen af ​​at sende beskeder er tidligere blevet fremhævet på Raymond Chens fremragende blog, The Old New Thing, som alle Win32-udviklere skulle abonnere på: [21]



  Hvis du bruger en af ​​de ovennævnte sendetypefunktioner til at sende en besked til et vindue, der tilhører afsendelsesgruppen, foretages opkaldet synkront.




  • http://blogs.msdn.com/b/oldnewthing/archive/2004/11/19/266664.aspx




  Husk at SendMessage leverer meddelelsen direkte til vinduet procedure; meddelelsespumpen ser det aldrig. [22]




  • http://blogs.msdn.com/b/oldnewthing/archive/2008/12/23/9248851.aspx






Og selvfølgelig er der relaterede spørgsmål fundet her på StackOverflow: [23]



  • SendMessage vs PostMessage + WaitForSingleObject