Иногда (подчеркну не всегда) при перетаскивании иконок рабочего стола, можно немного промахнуться и соответственно иконки немного перестроятся. Для большинства иконок рабочего стола,это не так уж и принципиально. Но есть определённые иконки,которые многие бы предпочли, что бы они (именно они) не сдвигались. Например - "Мой компьютер" , "Корзина" , "Chrome" Можно конечно включить - Упорядочить значки автоматически. Но тогда исчезает возможность размещения иконок по своему выбору. Я сделал программку которая при запуске - ПК отображается в трее рабочего стола,которую я естественно могу отключить. Функционал программки: Над первыми тремя иконками в правом верхнем углу экрана. Я повесил прозрачное окно,и в этом окне так же разместил три прозрачных дочерних окна,естественно по определённым координатам и с определёнными стилями. Ну и соответственно прописал определённые действия в процедурах. Мышкой эти три иконки ни как не захватить,и соответственно сдвигаться они не будут. Надо понимать что любая иконка отреагирует на исполнение (ни считая захвата) ни тогда когда ты нажал кнопку а только тогда когда ты кнопку отпустил По этому если в зоне иконки над навесным прозрачным окном будет отпущена левая кнопка мышки - WM_LBUTTONUP тут же к навесному окну добавиться стиль - WS_EX_TRANSPARENT что даст возможность манипулировать самой иконкой следом произойдёт программная имитация клика левой кнопки мышки и тут же обратно у навесного окна снимиться стиль - WS_EX_TRANSPARENT Точно такая же обработка и правой кнопки мышки . Для окна под иконкой "Корзина" добавлен еще обработчик - WM_DROPFILES Работает отлично меня это устраивает По сути тот же функционал,только иконки не сдвигаемые Напомню что программка весит в трее,и я могу просто выключить этот навес Вопрос: А в принцыпи можно сделать так,чтобы не использовать эти танцы с бубнами,а каким то другим способом запретить передвигаться конкретной (подчёркиваю конкретной) иконке
Бред наверно, но: 1. Узнать, какая функция используется для сдвигания иконки в процессе explorer.exe(скорее всего). Что то похожее на SHChangeNotify 2. Заинжектить свою dll, перехватить эту функцию. Скипать иконки которые не надо сдвигать Инжектор dll'ок: https://wasm.in/threads/inzhekty.34981/page-3#post-440371
Засабклассить элемент, в котором рисуется иконка и который перетаскивается мышью, и фильтровать WM_MOVE. Код (Text): SetWindowLong(,GWL_WNDPROC,)