c ++ - Er det muligt for 2 vinduer styret af Windows at have det samme vindues håndtere værdi?

Indlæg af Hanne Mølgaard Plasc

Problem



Er det muligt for 2 vinduer, der forvaltes af Windows, at have det samme vindues håndtere værdi?


Overvej begge tilfælde, når disse 2 vinduer åbnes med samme proces, og når disse 2 vinduer åbnes af 2 forskellige processer.

Bedste reference


Hurtigt svar: nej, det er ikke muligt, hvis de er inde i det samme skrivebord, hvert vindueshåndtag udstedt af vindueslederen er unikt (inde i skrivebordet) i hele vinduets eksistens, ellers kunne det ikke identificere et sådant vindue entydigt på skrivebordet system nuværende vinduesstation (som er defineret af MSDN som 'en logisk displayoverflade', der 'indeholder brugergrænsefladeobjekter som vinduer, menuer og kroge, det kan bruges til at oprette og styre vinduer ').





Langt svar:


Spørgsmålet diskuteres her, hvilket peger på denne artikel. Det ser ud til at HWND s er lokale til stationære computere, så du kan har to identiske HWND s, der peger på to forskellige vinduer, men de er nødvendigvis i to adskilte desktops , så der er ingen tvetydighed (WM håndterer dig, passerer til hver user32-funktion henviser implicit til det aktuelle skrivebord, for at gå til en anden, du skal bruge SetThreadDesktop, og dette opkald mislykkes, hvis din tråd ejer enhver desktop-indeholdt objekt i det aktuelle skrivebord). [4] [5]


På den anden side, når et vindue er ødelagt, kan dets håndtag kan genbruges, men IIRC vindueschefen anvender nogle teknikker for at undgå omgående genbrug af et håndtag.

Andre referencer 1


Hvert vindue åbent på et bestemt tidspunkt vil have et unikt håndtag.
Men de kan genbruges, når et vindue er lukket.