Как получить ручку окна в однопотоковую квартиру COM (STA)? - PullRequest
1 голос
/ 12 февраля 2009

CoInitialize (NULL) создает STA путем создания скрытого окна. Как получить дескриптор HWND для этого окна?

Функция EnumThreadWindows не работает, в примере я пробовал:

...

CoInitialize(NULL);

EnumThreadWindows(GetCurrentThreadId(), EnumThreadWndProc, 0);

...

BOOL CALLBACK EnumThreadWndProc(HWND hwnd, LPARAM lParam)
{
   m_hwnd = hwnd;

   return FALSE;
}

Ничто не входит в EnumThreadWndProc.

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 12 февраля 2009

Это скрытое окно является окном только для сообщений, оно не отображается, не имеет z-порядка, не может быть перечислено и не принимает широковещательные сообщения. Окно просто отправляет сообщения.

Чтобы найти окна только для сообщений, укажите HWND_MESSAGE в параметре hwndParent функции FindWindowEx. Кроме того, FindWindowEx выполняет поиск в окнах только для сообщений, а также в окнах верхнего уровня, если оба параметра hwndParent и hwndChildAfter имеют значение NULL.

Источник: * MSDN 1006 *

2 голосов
/ 25 февраля 2009

Кстати, я был бы ОЧЕНЬ осторожным здесь - вы действительно не должны отправлять оконные сообщения окнам, которыми вы не владеете. Скорее всего, ваш код сломается в будущей версии Windows.

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