将桌面图标改成列表模式[Code]

  近日看到有这么一个软件DesktopListview,可以将桌面的图标显示方式更改为“列表”模式,颇有那么点意思,有源码(AutoIt),于是就看了一下,原理很简单,但是,这个软件只能更改为“列表”模式,不能更改其他显示模式,而且不能恢复,要想恢复,重启explorer或者重启电脑,这点是我等不能接受的,于是,写一下主要的核心代码,包括C语言和Delphi语言,有需要的,稍微自己扩充一下即可。

C语言的代码

HWND h1,h2,h3;
if ((h1 = FindWindow("Progman",0) )!= 0)
   if ((h2 = FindWindowEx(h1,0,"SHELLDLL_DefView",0)) != 0)
      if ((h3 = FindWindowEx(h2,0,"SysListView32",0)) != 0)   
         SendMessage(h3,0x1000+142,3,0);

Delphi语言的代码

var
  h1,h2,h3 : THandle;
begin
  h1 := Windows.FindWindow('Progman',nil);
  if h1 <> 0 then
  begin
    h2 := Windows.FindWindowEx(h1,0,'SHELLDLL_DefView',nil);
    if h2 <> 0 then
    begin
      h3 := Windows.FindWindowEx(h2,0,'SysListView32',nil);
      if h3 <> 0 then
      begin
      	SendMessage(h3,$1000+142,3,0);
      end;
    end;
  end;
end;

参数取值解释

  主要是SendMessage中的参数取值。
  第二个参数“$1000+142”是常量“LVM_SETVIEW”的值;
  第三个参数“3”为文件查看方式,官方给出如下信息(对应的数值应为1-5,0为默认值):

  • LV_VIEW_DETAILS
  • LV_VIEW_ICON
  • LV_VIEW_LIST
  • LV_VIEW_SMALLICON
  • LV_VIEW_TILE

代码应该是可用的,如果代码有什么错误或不当的地方,请指出。
下图借用DesktopListview的截图:
screenshot

有人爱: 醉倚黄昏
有事做: https://zyhh.me/delphi/desktop-listview.html
有所期待: 一个有雨有肉的夜晚,和你没头没尾分一瓶酒。
评论 (9)
  1. # 1
    小草元 2013-07-19 04:36

    这个实现挺新颖,以前也看到过,也没想过弄成列表。不过想想列表了也没啥好处,不美观。

  2. # 2
    来自小众 2013-07-22 08:04

    大大能不能对程序完善一下,我的桌面文件名比较长,显示到一定宽度之后就变成省略号了,最好能够自定义列表宽度 ➡

    • 醉倚黄昏 2013-07-22 08:38 @
      @来自小众 @来自小众 : 我试了一下,宽度有时是最常文件名的长度,有时是可以满屏的,所以这个我暂时也不知道怎么弄。
    • 醉倚黄昏 2013-07-22 08:41 @
      @来自小众 @来自小众 : 如果长名文件是设置列表后建立的,可以试着先设为其他显示模式,再设置为列表。
  3. # 3
    来自小众 2013-07-23 13:15


    我机器上是固定宽度。

  4. # 4
    来自小众 2013-07-24 11:46

    偶的也是 win7 x64