2016-04-12 19 views
0

Ich versuche Handle zu SHELLDLL_DefView zu erhalten.WinApi - So erhalten Sie SHELLDLL_DefView

Also, ich habe diesen Code.

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

Eveyrtihing funktioniert OK, bis ich in Windows-Desktop brackground zu Diashow ändern. Wenn ich dann mit spy ++ Hierarchie der Fenster suche, hat SHELLDLL_DefView ein anderes Elternteil. Jetzt ist es # 32769 (Desktop) -> WorkerW -> SHELLDLL_DefView. Also kann ich es nicht finden. Problem ist, dass, wenn ich versuche,

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

als SHELLDLL_DefView nicht gefunden wird. ArbeiterW ja.

Kann jemand helfen?

+0

Warum müssen Sie das finden? Die Shell verfügt über eine umfangreiche Automatisierungsschnittstelle. Haben Sie festgestellt, dass es Ihren Anforderungen nicht entspricht? – IInspectable

+0

Ich muss Handle zu SHELLDLL_DefView –

+0

* "Ich muss X finden, weil ich X finden muss" * ist keine Antwort auf die Frage, warum Sie denken, dass Sie tun. – IInspectable

Antwort

0

Ich fand die Antwort. Sie müssen alle WorkerW durchlaufen.

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);