如何才能得到桌面上图标的位置?(100分)

  • 主题发起人 主题发起人 homejun
  • 开始时间 开始时间
H

homejun

Unregistered / Unconfirmed
GUEST, unregistred user!
桌面上的图标可以用鼠标拖动放到桌面上的任意位置,重新开机也一样保持原先的位置,<br>怎样才能取得图标在桌面上的位置呢?
 
问题有点难,帮你提前
 
我这里有一段管理桌面的源代码。<br>function GetDesktopListViewHandle: THandle; <br>var &nbsp;<br>&nbsp; S: String; <br>begin &nbsp;<br>&nbsp; Result := FindWindow('ProgMan', nil); <br>&nbsp; Result := GetWindow(Result, GW_CHILD); <br>&nbsp; Result := GetWindow(Result, GW_CHILD); <br>&nbsp; SetLength(S, 40); <br>&nbsp; GetClassName(Result, PChar(S), 39); <br>&nbsp; if PChar(S) &lt;&gt; 'SysListView32' then Result := 0; <br>end; &nbsp;<br>得到桌面的句柄了。<br>SendMessage(GetDesktopListViewHandle,LVM_ALIGN,LVA_ALIGNLEFT,0); <br>其实桌面是一个SysListView32,可以多查查LVM以及LVA消息。<br>不过那些信息肯定是存在注册表里的。<br><br><br>
 
在CommCtrl单元中<br><br>ListView_GetItemCount,ListView_GetItemPosition等函数就可以了,其句柄值同上<br>Result := FindWindow('ProgMan', nil); <br>&nbsp; Result := GetWindow(Result, GW_CHILD); <br>&nbsp; Result := GetWindow(Result, GW_CHILD); <br><br>相关问题都可以在CommCtrl的ListView_函数中找到答案!
 
to tan_jian:<br>ListView_GetItemCount能正确取得图标数目,但ListView_GetItemPosition却<br>引发系统错误,能帮我再找一下原因吗?
 
ListView_GetItemPosition需要一个指针,因此不能跨进程操作。<br>好像是《Windows核心编程》里面有个例子正好就是读取和保存桌面图标的位置,<br>记得作者的方法是跨进程SubClass,相当麻烦。如果能找到这本书的话建议你看一看。
 
后退
顶部