【发布时间】:2009-12-25 17:28:42
【问题描述】:
我喜欢在我的桌面上使用大图标,但它们经常恢复到正常大小,仍然无法追踪原因:)。 作为一名程序员,我决定编写自己的实用程序来保存和恢复图标位置。谷歌搜索并没有提供太多信息。 谁能给我一个提示或指向我可以从哪里开始的链接?
【问题讨论】:
我喜欢在我的桌面上使用大图标,但它们经常恢复到正常大小,仍然无法追踪原因:)。 作为一名程序员,我决定编写自己的实用程序来保存和恢复图标位置。谷歌搜索并没有提供太多信息。 谁能给我一个提示或指向我可以从哪里开始的链接?
【问题讨论】:
你不能可靠。 Raymond Chen explains why 在这篇文章中。
基本上,这是因为无法强制图标位于桌面上的特定位置,这意味着无法指定单个图标的位置。
【讨论】:
在某个时间点,例如 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;
【讨论】:
【讨论】:
阅读这篇文章,也许它会有所帮助:) save-and-restore-desktop-icon-positions
【讨论】: