2016-04-12 3 views
0

Я пытаюсь получить дескриптор SHELLDLL_DefView.WinApi - Как получить SHELLDLL_DefView

Итак, у меня есть этот код.

HWND hProgman = FindWindow(L"Progman", NULL); 
HWND hWnd = FindWindowEx(hProgman, 0, L"SHELLDLL_DefView", NULL); 

Eveyrtihing работает нормально, пока я не перейду в рабочий стол Windows на слайд-шоу. Затем, когда я выполняю поиск с помощью spy ++ иерархии окон, у SHELLDLL_DefView есть другой родитель. Теперь это # ​​32769 (рабочий стол) -> WorkerW -> SHELLDLL_DefView. Поэтому я не могу найти его. Проблема в том, что при попытке

HWND desktop = GetDesktopWindow(); 
HWND hWnd = FindWindowEx(desktop , 0, L"WorkerW", NULL); 
HWND hWnd = FindWindowEx(hWnd, 0, L"SHELLDLL_DefView", NULL); 

Than SHELLDLL_DefView не найден. Рабочий W да.

Может ли кто-нибудь помочь?

+0

Зачем вам это нужно? Оболочка имеет богатый интерфейс автоматизации. Вы оценили, что он не соответствует вашим требованиям? – IInspectable

+0

Мне нужно обработать SHELLDLL_DefView –

+0

* «Мне нужно найти X, потому что мне нужно найти X» *, это не ответ на вопрос, почему вы думаете, что делаете. – IInspectable

ответ

0

Я нашел ответ. Нужно перебирать все рабочие.

HWND destop = GetDesktopWindow(); 
HWND hWorkerW = NULL; 
HWND hShellViewWin = NULL; 
do 
{ 
    hWorkerW = FindWindowEx(destop, hWorkerW, L"WorkerW", NULL); 
    hShellViewWin = FindWindowEx(hWorkerW, 0, L"SHELLDLL_DefView", 0); 
} while (hShellViewWin == NULL && hWorkerW != NULL); 
Смежные вопросы