【问题标题】:Get and set Windows desktop icons size in C#在 C# 中获取和设置 Windows 桌面图标大小
【发布时间】:2012-07-21 14:08:01
【问题描述】:

我想在 Windows Vista 和 7 中获取和设置桌面图标大小 - 现在桌面允许使用 Ctrl-MouseWheel 动态调整图标大小,我想使用 C# 来实现。 是的,我可以将WM_MOUSEWHEEL 消息发送到桌面列表视图句柄,但这有两个缺点:

  • 我没有当前大小,所以我必须多次发送消息,直到达到已知状态(最大或最小大小)然后再次发送消息以调整大小到所需大小
  • 上述过程很慢(我必须发送许多消息才能达到所需的大小,这无法一步完成)并且有时会在达到已知状态时闪烁。

我想知道是否有任何方法可以获取当前图标大小并以编程方式将其设置为另一个大小

【问题讨论】:

    标签: c# windows


    【解决方案1】:

    我知道您可以使用SystemInformation class 轻松获得图标的大小。似乎没有setter,所以你可能需要更深入地挖掘并使用系统的SystemParameterInfo() function。请参阅SPI_GETICONMETRICSSPI_SETICONMETRICS 参数。

    【讨论】:

    • SystemInformation 类使用与注册表项“HKEY_CURRENT_USER\Control Panel\desktop\WindowMetrics\Shell Icon Size”相同的信息,它不反映实际大小。例如,使用 Ctrl-MouseWheel 调整桌面图标的大小,然后阅读 SystemInformation.IconSize。您将始终获得 32x32
    【解决方案2】:

    似乎唯一的方法是通过注册表。查看this page 的中间(“在 Windows 中时”)。

    更新:

    好的,我明白你现在在说什么了。您需要使用桌面的IFolderView (CurrentViewMode) 或IFolderView2 (ViewModeAndIconSize)。

    【讨论】:

    • 使用“HKEY_CURRENT_USER\Control Panel\desktop\WindowMetrics\Shell Icon Size”需要重置资源管理器(通过注销、重新启动或杀死它),并且Ctrl-MouseWheel功能不使用它 - 阅读这个键没有得到真正的图标大小,设置它不会立即改变
    • 我认为IFolderView2是正确的方向,但是你有从桌面获取这个界面的例子吗?
    • 不幸的是(或者也许幸运的是)资源管理器似乎没有公开桌面文件夹的 *View 界面。
    • 太糟糕了。我将尝试更多时间来获取界面 - 我已经看到 IFolderView2 可以很好地调整图标大小(WindowsAPICodePack 中有一个示例允许在应用程序的 ExplorerBrowser 中调整图标大小,但在这种情况下很容易获得IExplorerBrowser 和 IFolderView2 接口),现在我只需要一种方法来获取桌面的 IExplorerBrowser 或 IFolderView2 接口。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-25
    相关资源
    最近更新 更多