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