Windows桌面实际上是一个ListView,可以取得它的句柄,下面是个例子:
...
//获得桌面listview的句柄
function GetDesktopListViewHandle: THandle;
var
S: String;
begin
Result := FindWindow('ProgMan', nil);
//取得ProgMan窗口句柄
Result := GetWindow(Result, GW_CHILD);
//取子窗口句柄
Result := GetWindow(Result, GW_CHILD);
//再取子窗口句柄
SetLength(S, 40);
GetClassName(Result, PChar(S), 39);
if PChar(S) <> 'SysListView32' then
Result := 0;
end;
//让桌面图标靠左对齐
procedure TForm1.Button1Click(Sender: TObject);
begin
SendMessage(GetDesktopListViewHandle,LVM_ARRANGE,LVA_ALIGNLEFT,0);
end;
//让桌面图标最近对齐(使图标对齐到最近的网格中间)
procedure TForm1.Button2Click(Sender: TObject);
begin
SendMessage(GetDesktopListViewHandle,LVM_ARRANGE,LVA_SNAPTOGRID,0);
end;
...
但是,使ListView图标最右对齐好像做不到
(
另外,普通ListView可以最上对齐,而桌面的ListView却不可以,可能是
因为Desktop用自己的Arrange方法覆盖了普通ListView的Arrange方法.
既然取得了桌面ListView的句柄,那么所能做到的就不仅仅是排列图标了...