【问题标题】:How to get/set desktop icons position and size from Delphi?如何从 Delphi 获取/设置桌面图标的位置和大小?
【发布时间】:2009-12-25 17:28:42
【问题描述】:

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

【问题讨论】:

    标签: delphi desktop


    【解决方案1】:

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

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

    【讨论】:

      【解决方案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;
      

      【讨论】:

        【解决方案3】:

        【讨论】:

        • 谢谢,但我想写自己的实用程序,只是为了经验。
        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-02-17
          • 1970-01-01
          相关资源
          最近更新 更多