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