Я хочу сделать анимированный рабочий стол для Windows 7 с помощью DirectX. Я использую С#, SlimDX и пару P/Invoke для импорта функций Windows API. Я не блестящий с родным программным обеспечением Windows, но у меня есть ящик в Интернете, и я считаю, что мне нужно сделать:
1) Найдите дескриптор окна, содержащего обои dekstop, подключите его к устройству DirectX и вставьте в него.
2) Создайте новое окно вывода и вставьте его поверх обоев рабочего стола, но под значками рабочего стола.
Я пробовал оба эти, но, похоже, не работает. Если я перейду в иерархию окон, начиная с дескриптора, возвращаемого GetDesktopWindow(), я могу пойти Desktop → WorkerW → SHELLDLL_DefView → SysListView32. Если я подключу устройство DirectX к этому дескриптору, я могу нарисовать весь рабочий стол, но он также охватывает значки. Если я создаю форму Windows, установите ее родительский объект в SHELLDLL_DefView с помощью SetParent(), а затем используйте SetWindowPos для воспроизведения с его Z-порядком. Я могу только заставить его пойти либо за обои рабочего стола, либо перед значками рабочего стола +.
Похоже, что обои для рабочего стола являются фоном для представления папки, содержащего значки, и поэтому то, что я пытаюсь сделать, не может работать. Единственным решением тогда было бы не использовать рабочий стол для значков или найти какую-либо альтернативу, например. перезаписывая рабочий стол, затем накладывая прозрачное окно, содержащее представление содержимого некоторой папки.
Есть ли у кого-нибудь представление о том, что я должен делать, или даже возможно ли, что я хочу сделать? Кажется, вы можете рисовать на фоне рабочего стола с помощью GDI (как я считаю, программа wxSnow), и я видел нечто похожее на то, что я хочу сделать VLC Media Player под Windows XP с режимом DirectX (интересно, я не может показаться, что эта опция включена в моей системе).
Спасибо!