Возможно ли, чтобы 2 окна под управлением Windows имели одинаковое значение дескриптора окна? - PullRequest
2 голосов
/ 05 сентября 2011

Возможно ли, чтобы 2 окна под управлением Windows имели одинаковое значение дескриптора окна?

Рассмотрим оба случая, когда эти 2 окна открываются одним и тем же процессом и когда эти 2 окна открываются 2 разными процессами.

Ответы [ 2 ]

5 голосов
/ 05 сентября 2011

Быстрый ответ: нет, это невозможно, если они находятся внутри одного рабочего стола, каждый дескриптор окна, выданный оконным менеджером, уникален (внутри своего рабочего стола) на протяжении всего существования окна, иначе он не мог бы однозначно идентифицировать такойокно на системе текущая оконная станция рабочего стола (которая определяется MSDN как «логическая поверхность отображения», которая «содержит объекты пользовательского интерфейса, такие как окна, меню и ловушки; можетиспользоваться для создания и управления окнами ").

Длинный ответ:

Этот вопрос обсуждается здесь , что указывает на эту статью .Кажется, что HWND являются локальными для рабочих столов, поэтому вы можете иметь два одинаковых HWND, которые указывают на два разных окна, но они обязательно в двух отдельных рабочих столах ,поэтому нет никакой двусмысленности (дескриптор WM, который вы передаете каждой функции user32, неявно ссылается на текущий рабочий стол, чтобы перейти к другому, вы должны использовать SetThreadDesktop, и этот вызов завершится неудачно, если ваш поток владеет любым объектом, содержащимся на рабочем столе, в текущийрабочий стол).

С другой стороны, когда окно разрушено, его дескриптор можно использовать повторно, но IIRC оконный менеджер использует некоторые методы, чтобы избежать немедленного повторного использования дескриптора.

4 голосов
/ 05 сентября 2011

Каждое окно, открытое в определенное время, будет иметь уникальный дескриптор.Однако их можно использовать повторно после закрытия окна.

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