Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi desktopViewMode (https://www.delphipraxis.net/109098-desktopviewmode.html)

rawsoul 24. Feb 2008 14:15


desktopViewMode
 
Hallo liebe Liebenden,

aufgrund von Platzproblemen auf meinem Desktop habe ich nach einer Möglichkeit gesucht, meinen Desktop Viewmode zu ändern. Klappt soweit ganz gut. Allerdings kann ich auch nur 'viewen', keine Symbole anklicken oder gar Dateien / Ordner öffnen. Der Code ist von einem C++ Programm abgeleitet.

Delphi-Quellcode:
procedure setDesktopViewMode(viewMode:Integer);
var
  handle:hwnd;
begin
  handle := findwindowex(findwindowex(findwindow('Progman',nil),0,'SHELLDLL_DefView',nil),0,'SysListView32',nil);
  SetWindowLong(handle, GWL_STYLE, LVS_LIST);
   ShowWindowAsync(handle, SW_SHOW);
  case viewmode of
    0: SetWindowLong(handle, GWL_STYLE, LVS_ICON);
    1: SetWindowLong(handle, GWL_STYLE, LVS_SMALLICON);
    2: SetWindowLong(handle, GWL_STYLE, LVS_LIST);
    3: SetWindowLong(handle, GWL_STYLE, LVS_REPORT);
  end;
  SendMessage(handle, WM_STYLECHANGED, GWL_STYLE, 10);
   SendMessage(handle, LVM_ARRANGE, LVA_DEFAULT, 0);
  ShowWindow(handle, SW_SHOWNORMAL);
end;
Falls man den Schnipsel testen möchte, reicht ein Neuladen des Prozesses explorer.exe, damit alles wieder so funktioniert, wie es sollte.

Vielleicht kann mir ja jemand helfen, das Problem zu lösen =)

Gruß, Frank.

toms 24. Feb 2008 16:03

Re: desktopViewMode
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo

Ich habe mal geschaut, wie es Wintidy macht und bin zu diesen Code gekommen.
Ein vollständiges Beispiel befindet sich im Anhang.

Delphi-Quellcode:
procedure SetDesktopStyle(AViewMode: TViewStyle);
const
  STYLES: array[TViewStyle] of DWORD = (LVS_ICON, LVS_SMALLICON, LVS_LIST, LVS_REPORT);
var
  S: StyleStruct;
  lvHan: HWND;
begin
  if IsActiveDesktop then Exit;
  lvHan := GetlvHan;
  if lvHan <> 0 then
  begin
    S.StyleOld := GetWindowLong(lvHan, GWL_STYLE);
    S.StyleNew := S.StyleOld and not LVS_TYPEMASK;
    S.StyleNew := S.StyleNew or STYLES[AViewMode];
    SetWindowLong(lvHan, GWL_STYLE, S.StyleNew);
    SendMessage(lvHan, WM_STYLECHANGED, GWL_STYLE, Integer(@S));
    ShowWindow(lvHan, SW_SHOWNORMAL);
  end;
end;

rawsoul 24. Feb 2008 16:29

Re: desktopViewMode
 
Super, tausend Dank!

toms 24. Feb 2008 16:43

Re: desktopViewMode
 
Nachtrag:

LVS_LIST scheint nicht zu funktionieren.

Man kann auch eine Scrollbar anzeigen, wenn es viele Icons auf dem Desktop hat.

Delphi-Quellcode:
ShowScrollbar(GetDesktopWindow, SB_VERT, True)
Im Report Modus sieht es so aus (ohne Scrollbar):

http://img256.imageshack.us/img256/1530/desktopqn8.jpg


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz