Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Поменять позицию ярлыка на рабочем столе


Автор: Magnetic 11.1.2008, 21:40
Как можно задать позицию ярлыка на рабочем столе? Если нельзя проще, чем через winapi, тогда скажите в сторону каких функций и сообщений копать?

Автор: mr.DUDA 11.1.2008, 21:46
тут есть: www.codeproject.com

Автор: Magnetic 12.1.2008, 00:19
Искал я там и много еще где, но достаточно информации для решения моей задачи не нашел. Конкретнее - нужно менять положение корзины на рабочем столе.

Автор: VisualProgrammerNET 13.1.2008, 21:35
Всё, что я могу посоветовать - это ветвь реестра
HKCU/Software/Microsoft/Windows/Shell/Bags/1/Desktop - тут настройки десктопа (насколько я помню). Мож чё пригодится.

Автор: source777 13.1.2008, 22:24
Цитата

Как можно задать позицию ярлыка на рабочем столе? Если нельзя проще, чем через winapi, тогда скажите в сторону каких функций и сообщений копать?
Насчёт .NET не знаю, мне известен только WinAPI способ...
Код

h=FindWindow('ProgMan', nil);
h=GetWindow(h, GW_CHILD);
h=GetWindow(h, GW_CHILD);
SendMessage(h, LVM_SETITEMPOSITION, номер_ярлыка, MAKELPARAM(x,y));
Если что, копай в эту сторону...

Автор: Magnetic 13.1.2008, 23:31
Всем спасибо за помощь! Вопрос решен.

Автор: source777 14.1.2008, 15:39
Цитата

Всем спасибо за помощь! Вопрос решен.
Написал бы хоть как именно решен, интересно посмотреть, если на чистом .NET...

Автор: Magnetic 14.1.2008, 16:12
source777, конечно использовал winapi, благодаря твоему примеру нашел более подробное решение.

Код

        ...
        public static void Move(Int16 x, Int16 y)
        {
            IntPtr handle = FindWindow("ProgMan", null);
            handle=GetWindow(handle, GW.CHILD);
            IntPtr desktopListView = GetWindow(handle, GW.CHILD);
            MAKELPARAM M = new MAKELPARAM();
            M.wLow = x;
            M.wHigh = y;
            int i = 0; //номер ярлыка, он всего один на даном рабочем столе
            SendMessage(desktopListView, 0x1000 + 15, i, M);
        }
        ...
        [StructLayout(LayoutKind.Sequential, Pack = 2)]
        private struct MAKELPARAM
        {
            public Int16 wLow;
            public Int16 wHigh;
        }

Автор: mr.DUDA 14.1.2008, 17:35
(оффтоп) Хакеры...  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)