Как программно управлять расположением значков на рабочем столе Windows? - PullRequest
23 голосов
/ 25 сентября 2008

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

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

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

Ответы [ 4 ]

11 голосов
/ 25 сентября 2008

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

Я немного погуглил для некоторого кода на C # и не смог найти пример, но нашел следующую статью. Torry: ... получить / установить положение значков на рабочем столе? . Это код Delphi, но я нахожу его очень читабельным, и с некоторыми вызовами P / Вы сможете перевести его на c #.

2 голосов
/ 25 сентября 2008

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

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

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

1 голос
/ 26 сентября 2008

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

Перемешивание значков на рабочем столе с использованием связи между процессорной памятью

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

0 голосов
/ 25 сентября 2008

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

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

...