Я хочу иметь возможность подождать или получить какой-то ответный вызов, когда рабочий стол Windows закончил рисовать / полностью обновился.
Мой проект о создании анимации с иконками на рабочем столе , Да, я знаю, что это злоупотребляет API windows как сумасшедшие. Я использую этот проект с большим эффектом как способ узнать больше о C ++ и Windows API.
В моем коде у меня есть две фазы. У меня есть часть, которая "загружает значки". Это просто копирование .ico
файлов в C:\Users\Username\Desktop
. Второй шаг - серия вызовов API windows для изменения положения значков. Я получаю HWND на рабочем столе, а затем LVM_GETITEM
, чтобы узнать, какой значок я обновляю, и, наконец, LVM_SETITEMPOSITION
, чтобы изменить положение.
Моя проблема между этими шагами. Мой код позиционирования работает только тогда, когда значки уже на экране. Когда я пытаюсь запускать их один за другим, рабочий стол остается пустым, поскольку значки еще не загружены в ListView из моей операции копирования файлов. Поэтому LVM_GETITEMCOUNT
равно 0 в точке, где я хотел бы расположить значки.
Мне нужен способ ожидания до точки, где рабочий стол был полностью обновлен, чтобы запустить мой код позиционирования значков ListView. , Все различные способы обновления sh рабочего стола только отправляют сообщение на рабочий стол для обновления sh, не дожидаясь обновления рабочего стола. Вот что я уже пробовал:
- Использование
RedrawWindow
для форсирования WM_PAINT
сообщения. SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_FLUSH, 0, 0);
Я получаю небольшую задержку, так как она запускается, но ее нет Достаточно для загрузки значков, поэтому это не правильная задержка. - Отправка
WM_SETREDRAW
0, а затем отправка 1. - Убийство
explorer.exe
(плохо и по многим другим причинам)
Спасибо за любую помощь.