Подтвердить что ты не робот

Как я могу программным образом манипулировать местоположениями на рабочем столе Windows?

Несколько лет назад я невинно пытался написать небольшое приложение, чтобы сохранить мои тактически размещенные значки рабочего стола, потому что мне было больно перетаскивать их обратно в свои места, когда какое-то событие reset их. Я сдался после того, как BAY слишком много времени не смог найти способ запроса, а тем более сохранить и reset, положение моих значков на рабочем столе.

Кто-нибудь знает, где Windows продолжает эту информацию, и если есть API для их установки?

Спасибо, Ричард

4b9b3361

Ответ 1

Если я не ошибаюсь, рабочий стол - это просто ListView, и вам придется отправить сообщение LVM_SETITEMPOSITION в дескриптор рабочий стол.

Я немного поработал над некоторым кодом С# и не смог найти пример, но нашел следующую статью. Torry:... получить/установить позиции значков на рабочем столе?. Это delphi-код, но я считаю его очень читаемым и с некоторыми P/Invokes вы сможете перевести его на С#.

Ответ 2

Рабочий стол - это просто элемент управления ListView, и вы можете получить его дескриптор и отправить ему сообщения, чтобы перемещать значки вокруг, используя LVM_SETITEMPOSITION.

Получение позиций значков с использованием LVMGETITEMPOS немного сложнее. Вы должны передать указатель на структуру POINT как ваш LPARAM. Если вы попытаетесь это сделать, вы, вероятно, столкнетесь с Explorer. Проблема в том, что вы передали ему указатель в своем адресном пространстве, который элемент управления интерпретируется как указатель в адресном пространстве проводника. Ой!

Решение, которое я использовал, - это вставить DLL в процесс проводника и отправить сообщение оттуда. Тогда вам просто нужно получить информацию о позиции обратно в ваш процесс.

Ответ 3

Я все еще смотрю на это и опубликую результат, как только я наконец получу что-то работающее. Я публикую это, потому что, косвенно, спасибо Дэви, я также нашел классическую реализацию VB:

Иконки в случайном порядке с использованием обмена данными между процессорами

и это, вероятно, станет основой для моего кода.

Ответ 4

Я понятия не имею об API, но я знаю, что Ultramon (http://www.realtimesoft.com/ultramon/) имеет функцию, предназначенную для сохранения размещения значков (хотя Я никогда не использовал его для сохранения расположения значков, он необходим для использования нескольких мониторов). Последняя бета-версия работает безупречно с Vista (за исключением того, что иногда с небольшим сбоем или двумя при первом входе в мою машину через RDP), и, конечно же, не было никаких проблем с XP. Я использовал его уже более четырех лет.

И я упомянул, что это лучшая утилита для использования нескольких мониторов?