Являются ли дескрипторы окон (HWND) уникальными, или они когда-либо используются повторно? - PullRequest
6 голосов
/ 14 августа 2011

Я думаю, есть ли ручки с одинаковым значением?

Чтобы прояснить вопрос, допустим, я открываю Блокнот, набираю текст, сохраняю его, а затем закрываю Блокнот. Если я повторю это тысячу раз (или даже больше), получу ли я когда-нибудь возможность увидеть то же значение дескриптора окна (HWND), которое используется для главного окна Блокнота, которое использовалось впервые? Если так, то почему?

Ответы [ 4 ]

6 голосов
/ 14 августа 2011

Да.Существует только конечное число значений, которыми может быть представлен дескриптор, поэтому Windows в конечном итоге придется их повторно использовать.

Как только дескриптор закрыт, он исчез, с ним ничего не поделаешь,не существует, и вы даже не должны смотреть на него.

И если впоследствии вы откроете другой дескриптор, то возможно, что Windows повторно использует значение дескриптора.

2 голосов
/ 14 августа 2011

Я бы посоветовал вам не делать никаких предположений о значениях дескрипторов.

Вам не нужно думать о конкретных значениях дескриптора для всех практических целей. Дескриптор должен рассматриваться как непрозрачный заполнитель для чего-то другого. Вы можете передать ручку, чтобы ссылаться на что-то (например, окно), не имея ссылки на реальную вещь, но вам никогда не придется смотреть на ручку сама . Тот факт, что это числовое значение, следует рассматривать как деталь реализации, т.е. не важно (если, возможно, вы не занимаетесь системным программированием низкого уровня).

При этом я бы поддержал ответ @ jalf: значения дескриптора могут быть использованы повторно. Если бы мне пришлось сделать какое-либо предположение об этом, я бы предположил, что значение дескриптора может быть повторно использовано в любое время .

2 голосов
/ 14 августа 2011

По принципу pigeonhole , да, они не могут быть уникальными.Фактически, Microsoft по-прежнему поддерживает совместимость с 16-битной Windows, и в результате дескрипторы имеют 16-битные значения.Таким образом, существует не более 65536 возможных значений дескриптора.

1 голос
/ 05 октября 2015

Да, дескрипторы окна используются повторно.

Документация для IsWindow Функция говорит:

Поток не должен использовать IsWindow для окначто он не создан, потому что окно может быть уничтожено после вызова этой функции.Кроме того, поскольку дескрипторы окон перерабатываются , дескриптор может даже указывать на другое окно .

...