1

Тема: Ahk: значки на рабочем столе

В одном источнике http://forum.shelek.ru/index.php/topic,22065.0.html нашёл такой код

#include <commctrl.h>

 //получаем хэндл рабочего стола как бы, потом хэндлы дочерних элементов  ...
 HANDLE r=FindWindow("ProgMan",NULL);
 r= GetWindow(r, GW_CHILD);
 r= GetWindow(r, GW_CHILD);

 //получаем количество иконок на рабочем столе
 int cnt=SendMessage(r,LVM_GETITEMCOUNT,0,0);
 //отправляя сообщение LVM_GETITEMTEXT, можем узнать имя иконки, 
 третьим параметром для SendMessage указываем номер иконки. 
 Здесь точно не скажу как сделать, читал что так просто имя иконки не взять, нужно читать с памяти другого процесса, 
 но добить это дело не хватило терпения)))
 
 TPoint xy;     //здесь будем хранить позицию иконки
 SendMessage(r,LVM_GETITEMPOSITION,i,(LONG)&xy);  //запишет в xy позицию иконки с номером i
 //изменяя xy.x и xy.y , зададим новую позицию
 SendMessage(r,LVM_GETITEMPOSITION,i,(LONG)&xy);  //и установим для иконки новую позицию на столе))

Можно в Autokotkey с помощью оконных сообщений реализовать что-то то подобное? Требуется получить  количество значков на рабочем столе и координаты каждого значка. По возможности (не обязательно) получить имя каждого из них.
В общем, трудности возникают уже на этапе 

ControlGet, OutputVar, Hwnd,, SysListView32, ahk_class Progman

А в основной части кода нарисовывается

SendMessage, LVM_GETITEMPOSITION, 1, (LONG)&xy, SysListView32,, Program Manager

Прошу помочь.

2 (изменено: teadrinker, 2010-11-28 21:00:52)

Re: Ahk: значки на рабочем столе

Количество:

ControlGet, ItemCount, List, Count, SysListView321, Program Manager
MsgBox, % ItemCount

Названия всех:

ControlGet, IconList, List,, SysListView321, Program Manager ahk_class Progman
MsgBox, % IconList

Координаты:

ControlGet, IconList, List,, SysListView321, Program Manager ahk_class Progman
Loop, Parse, IconList, `n
{
   WinGet, pid_target, PID, Program Manager ahk_class Progman

   hp_explorer := DllCall("OpenProcess"
                      , UInt, 0x18                              ; PROCESS_VM_OPERATION|PROCESS_VM_READ
                      , Int, false
                      , UInt, pid_target)

   remote_buffer := DllCall( "VirtualAllocEx"
                      , UInt, hp_explorer
                      , UInt, 0
                      , UInt, 0x1000
                      , UInt, 0x1000                            ; MEM_COMMIT
                      , UInt, 0x4)                              ; PAGE_READWRITE

   ; LVM_GETITEMPOSITION
   SendMessage, 0x1000+16,% A_Index -1, remote_buffer, SysListView321, Program Manager ahk_class Progman

   VarSetCapacity(buffer, 16)
   result := DllCall("ReadProcessMemory"
                , UInt, hp_explorer
                , UInt, remote_buffer
                , UInt, &buffer
                , UInt, 16
                , UInt, 0)

   x := NumGet(buffer)
   y := NumGet(buffer, 4)

   result := DllCall("VirtualFreeEx"
                   , UInt, hp_explorer
                   , UInt, remote_buffer
                   , UInt, 0
                   , UInt, 0x8000)         

   result := DllCall("CloseHandle", UInt, hp_explorer)

   MsgBox, %A_LoopField%`nLocated at: %x% %y%
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: Ahk: значки на рабочем столе

Чтобы значки не разбегались.

Сохранение расположения иконок на Рабочем столе

Часто при смене расширения иконки смещаются, и если их много, то всё больше пропадает желание их расставлять по местах. Если Вам это порядком надоело, то нужно сделать следующее:

Найти в реестре ключ: HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Streams.
Экспортировать весь раздел.
Прописать в autoexec.bat строчку, например regedit.exe c:\windows\regystry\desctop.reg (подставить свой путь к сохранённому файлу) чтобы настройки востанавливались автоматически.
При появлении новой иконки на рабочем столе нужно заново экспортировать ключ реестра.

Источник

4

Re: Ahk: значки на рабочем столе

Действительно не работает, приношу извинения. Вероятно, это для более ранней версии ОС.

5 (изменено: DD, 2018-06-04 05:45:49)

Re: Ahk: значки на рабочем столе

Есть еще 13-кб программа "IconPositions", с возможностью сохранения позиций значков в реестр и расстановки по местам:

Post's attachments

IconPositions.rar 5.56 kb, 5 downloads since 2018-06-04 

You don't have the permssions to download the attachments of this post.