如何从Delphi获取/设置桌面图标的位置和大小?

时间:2009-12-25 17:28:43

标签: delphi desktop

我喜欢在我的桌面上使用大图标,但通常它们恢复到正常大小,仍然无法追踪原因:)。 作为程序员,我决定编写自己的实用程序来保存和恢复图标位置。谷歌搜索没有提供太多信息。 任何人都可以给我一个提示或指向我可以开始的链接吗?

4 个答案:

答案 0 :(得分:2)

在某个时间点,即Win2k / WinXP肯定,桌面实际上是一种ListView。我不确定在新操作系统中它仍然存在。知道获取桌面句柄并使用LV api函数很容易操作它来做像报表样式的显示。

以下两个函数向您展示如何开始操作桌面。

注意:我知道这适用于WinXP,我认为它适用于Vista和Win7,但我还没有测试过。使用这些示例,您不必花很长时间编写一组函数来获取/设置桌面上所有内容的图标位置。

procedure ReportStyleDesktop;
var
  wHandle : THandle;
  wStyle : Longint;
begin
  wHandle := GetDesktopWindow;

  if wHandle <> 0 then
    wHandle := FindWindowEx(wHandle, 0, 'Progman', 'Program Manager');

  if wHandle <> 0 then
    wHandle := FindWindowEx(wHandle, 0, 'SHELLDLL_DefView', 0);

  if wHandle <> 0 then
    wHandle := FindWindowEx(wHandle, 0, 'SysListView32', 0);

  if wHandle <> 0 then
  begin
    wStyle := GetWindowLong(wHandle, GWL_STYLE);
    wStyle := wStyle and (not LVS_TYPEMASK);
    wStyle := wStyle or LVS_REPORT or LVS_ICON;
    SetWindowLong(wHandle, GWL_STYLE, wStyle);
  end;
end;

procedure NormalStyleDesktop;
var
  wHandle : THandle;
  wStyle : Longint;
begin
  wHandle := GetDesktopWindow;

  if wHandle <> 0 then
    wHandle := FindWindowEx(wHandle, 0, 'Progman', 'Program Manager');

  if wHandle <> 0 then
    wHandle := FindWindowEx(wHandle, 0, 'SHELLDLL_DefView', 0);

  if wHandle <> 0 then
    wHandle := FindWindowEx(wHandle, 0, 'SysListView32', 0);

  if wHandle <> 0 then
  begin
    wStyle := GetWindowLong(wHandle, GWL_STYLE);
    wStyle := wStyle and (not LVS_TYPEMASK);
    wStyle := wStyle or LVS_ICON;
    SetWindowLong(wHandle, GWL_STYLE, wStyle);
  end;
end;

答案 1 :(得分:2)

你不能可靠。 Raymond Chen explains why在这篇文章中。

基本上,这是因为无法强制图标位于桌面上的特定位置,这意味着无法指定单个图标的位置。

答案 2 :(得分:1)

答案 3 :(得分:0)

阅读这篇文章,也许有帮助:) save-and-restore-desktop-icon-positions