Закрепить определённые конки рабочего стола

Тема в разделе "WASM.BEGINNERS", создана пользователем assch, 17 май 2024.

  1. assch

    assch Member

    Публикаций:
    0
    Регистрация:
    17 мар 2011
    Сообщения:
    203
    Иногда (подчеркну не всегда) при перетаскивании иконок рабочего стола,
    можно немного промахнуться и соответственно иконки немного перестроятся.
    Для большинства иконок рабочего стола,это не так уж и принципиально.

    Но есть определённые иконки,которые многие бы предпочли,
    что бы они (именно они) не сдвигались.
    Например - "Мой компьютер" , "Корзина" , "Chrome"

    Можно конечно включить - Упорядочить значки автоматически.
    Но тогда исчезает возможность размещения иконок по своему выбору.

    Я сделал программку которая при запуске - ПК
    отображается в трее рабочего стола,которую я естественно могу отключить.

    Функционал программки:
    Над первыми тремя иконками в правом верхнем углу экрана.
    Я повесил прозрачное окно,и в этом окне так же разместил три прозрачных
    дочерних окна,естественно по определённым координатам и с определёнными стилями.
    Ну и соответственно прописал определённые действия в процедурах.

    Мышкой эти три иконки ни как не захватить,и соответственно сдвигаться они не будут.

    Надо понимать что любая иконка отреагирует на исполнение (ни считая захвата)
    ни тогда когда ты нажал кнопку а только тогда когда ты кнопку отпустил

    По этому если в зоне иконки над навесным прозрачным окном
    будет отпущена левая кнопка мышки - WM_LBUTTONUP
    тут же к навесному окну добавиться стиль - WS_EX_TRANSPARENT
    что даст возможность манипулировать самой иконкой
    следом произойдёт программная имитация клика левой кнопки мышки
    и тут же обратно у навесного окна снимиться стиль - WS_EX_TRANSPARENT

    Точно такая же обработка и правой кнопки мышки
    .
    Для окна под иконкой "Корзина" добавлен еще обработчик - WM_DROPFILES

    Работает отлично меня это устраивает

    По сути тот же функционал,только иконки не сдвигаемые
    Напомню что программка весит в трее,и я могу просто выключить этот навес

    Вопрос:

    А в принцыпи можно сделать так,чтобы не использовать
    эти танцы с бубнами,а каким то другим способом запретить
    передвигаться конкретной (подчёркиваю конкретной) иконке
     
    Последнее редактирование: 17 май 2024
  2. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    133
    Бред наверно, но:
    1. Узнать, какая функция используется для сдвигания иконки в процессе explorer.exe(скорее всего). Что то похожее на SHChangeNotify
    2. Заинжектить свою dll, перехватить эту функцию. Скипать иконки которые не надо сдвигать

    Инжектор dll'ок:
    https://wasm.in/threads/inzhekty.34981/page-3#post-440371
     
    Последнее редактирование: 17 май 2024
  3. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.995
    Засабклассить элемент, в котором рисуется иконка и который перетаскивается мышью, и фильтровать WM_MOVE.
    Код (Text):
    1. SetWindowLong(,GWL_WNDPROC,)