首页  编辑  

设置开始菜单的风格

Tags: /超级猛料/OS.操作系统/开始菜单/   Date Created:

设置开始菜单的风格

switch the XP startpanel to classic or XP style?

Author: Assarbad  

(***********************************************************************

** Who wants to know more about the method how I discovered all this

** may have a look at the following URL (German) or contact me via my

** forum:

**

** http://www.delphipraxis.net/topic62087,0,asc,0.html

***********************************************************************)

type

 SHELLSTATE = record

   Flags1: DWORD;

(*

   BOOL fShowAllObjects : 1;

   BOOL fShowExtensions : 1;

   BOOL fNoConfirmRecycle : 1;

   BOOL fShowSysFiles : 1;

   BOOL fShowCompColor : 1;

   BOOL fDoubleClickInWebView : 1;

   BOOL fDesktopHTML : 1;

   BOOL fWin95Classic : 1;

   BOOL fDontPrettyPath : 1;

   BOOL fShowAttribCol : 1; // No longer used, dead bit

   BOOL fMapNetDrvBtn : 1;

   BOOL fShowInfoTip : 1;

   BOOL fHideIcons : 1;

   BOOL fWebView : 1;

   BOOL fFilter : 1;

   BOOL fShowSuperHidden : 1;

   BOOL fNoNetCrawling : 1;

*)

   dwWin95Unused: DWORD; // Win95 only - no longer supported pszHiddenFileExts

   uWin95Unused: UINT; // Win95 only - no longer supported cbHiddenFileExts

   // Note: Not a typo!  This is a persisted structure so we cannot use LPARAM

   lParamSort: Integer;

   iSortDirection: Integer;

   version: UINT;

   // new for win2k. need notUsed var to calc the right size of ie4 struct

   // FIELD_OFFSET does not work on bit fields

   uNotUsed: UINT; // feel free to rename and use

   Flags2: DWORD;

(*

   BOOL fSepProcess: 1;

   // new for Whistler.

   BOOL fStartPanelOn: 1;       //Indicates if the Whistler StartPanel mode is ON or OFF.

   BOOL fShowStartPage: 1;      //Indicates if the Whistler StartPage on desktop is ON or OFF.

   UINT fSpareFlags : 13;

*)

 end;

 LPSHELLSTATE = ^SHELLSTATE;

const

 SSF_SHOWALLOBJECTS  = $00000001;

 SSF_SHOWEXTENSIONS  = $00000002;

 SSF_HIDDENFILEEXTS  = $00000004;

 SSF_SERVERADMINUI   = $00000004;

 SSF_SHOWCOMPCOLOR   = $00000008;

 SSF_SORTCOLUMNS     = $00000010;

 SSF_SHOWSYSFILES    = $00000020;

 SSF_DOUBLECLICKINWEBVIEW = $00000080;

 SSF_SHOWATTRIBCOL   = $00000100;

 SSF_DESKTOPHTML     = $00000200;

 SSF_WIN95CLASSIC    = $00000400;

 SSF_DONTPRETTYPATH  = $00000800;

 SSF_SHOWINFOTIP     = $00002000;

 SSF_MAPNETDRVBUTTON = $00001000;

 SSF_NOCONFIRMRECYCLE = $00008000;

 SSF_HIDEICONS       = $00004000;

 SSF_FILTER          = $00010000;

 SSF_WEBVIEW         = $00020000;

 SSF_SHOWSUPERHIDDEN = $00040000;

 SSF_SEPPROCESS      = $00080000;

 SSF_NONETCRAWLING   = $00100000;

 SSF_STARTPANELON    = $00200000;

 SSF_SHOWSTARTPAGE   = $00400000;

procedure SHGetSetSettings(var lpss: SHELLSTATE; dwMask: DWORD; bSet: BOOL) stdcall;

 external 'shell32.dll';

procedure SwitchStartpanelXP(xpstyle: Boolean);

var

 lpss: SHELLSTATE;

 bIsXPstyle: Boolean;

begin

 ZeroMemory(@lpss, SizeOf(lpss));

 // Retrieve current style

 SHGetSetSettings(lpss, SSF_STARTPANELON, False);

 // Check the current style

 bIsXPstyle := (lpss.Flags2 and 2) = 2; // fStartPanelOn

 // If a change occurred

 if (bIsXPstyle <> xpstyle) then

 begin

   // If the user wants XP style then set it, else reset it

   if (xpstyle) then

     lpss.Flags2 := 2 // fStartPanelOn = 1

   else

     lpss.Flags2 := 0; // fStartPanelOn = 0

   // Set new style

   SHGetSetSettings(lpss, SSF_STARTPANELON, True);

   // Notify desktop of the change

   PostMessage(FindWindow('Progman', nil), WM_USER + $60, 0, 0);

 end;

 // Notify taskbar

 PostMessage(FindWindow('Shell_TrayWnd', nil), WM_USER + $0D, 0, 0);

end;