AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Change StartMenu

Ein Thema von colder · begonnen am 28. Mär 2006 · letzter Beitrag vom 28. Mär 2006
Antwort Antwort
Benutzerbild von colder
colder

Registriert seit: 23. Jul 2004
Ort: Bonn
30 Beiträge
 
Delphi 7 Professional
 
#1

Change StartMenu

  Alt 28. Mär 2006, 16:27
Hallo,

Ich muss für eine Software-Verteilung ein Tool schreiben welches interaktiv
das Startmenu auf Classic schaltet. Zwei Ansätze bieten sich an.

1. hab ich unter http://forum.assarbad.net/viewtopic.php?p=7068 gefunden und angepasst.
Ich nehme es vorweg, nichts passiert. lpss.Flags2 ist immer 0 egal welchen Style das
Startmenu hat.

Delphi-Quellcode:
Program StartMenu;

Uses
  windows,
  Messages,
  SysUtils,
  CommandLine;

{$APPTYPE CONSOLE}
{$R *.res}

Type
  SHELLSTATE = Record
    Flags: DWORD;
    dwWin95Unused: DWORD;
    uWin95Unused: UINT;
    lParamSort: Integer;
    iSortDirection: Integer;
    uNotUsed: UINT;
    Flags2: DWORD;
  End;

  LPSHELLSTATE = ^SHELLSTATE;

Const
  Version = '2.0';
  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 : SwitchStartmenu
//------------------------------------------------------------------------------
Procedure SwitchStartmenu(xpstyle: Boolean);
Var
  lpss: SHELLSTATE;
  bIsXPstyle: Boolean;
Begin
  ZeroMemory(@lpss, sizeof(lpss));
  SHGetSetSettings(lpss, SSF_STARTPANELON, False);
  bIsXPstyle := (lpss.Flags2 And 2) = 2;
  If (bIsXPstyle <> xpstyle) Then Begin
    If (xpstyle) Then
      lpss.Flags2 := 2
    Else
      lpss.Flags2 := 0;
    SHGetSetSettings(lpss, SSF_STARTPANELON, True);
    // Notify desktop of the change
    PostMessage(FindWindow('Progman', Nil), WM_USER + $60, 0, 0);
  End;
  PostMessage(FindWindow('Shell_TrayWnd', Nil), WM_USER + $0D, 0, 0);
End;
//------------------------------------------------------------------------------
// Procedure : SetCommands
//------------------------------------------------------------------------------
Procedure SetCommands();
Var
  sValue: String;
Begin

  // Keine Parameter dann EXIT
  If ParamCount = 0 Then
    EXIT;

  If GetCmdValue(sValue, 'xp', True) Then
    If Sametext(sValue, 'OFF') Then
      SwitchStartmenu(True)
    Else
      SwitchStartmenu(False);

End;

Begin
  SetCommands;
End.
2. Änderung der Registry.

Hier läuft das wie folgt. Im Entry:
HKCU\Software\Microsoft\Windows\CurrentVersion\Exp lorer\ShellState Byte 33 anpassen
00 = Windows XP
02 = Windows Classic

Das Problem hier, bevor diese Werte gesetzt werden, muss der Explorer abgeschossen werden
(der chached die Werte), dann den Explorer wieder starten. Siehe da, Startmenu geändert.

Leider wirft das abschiessen/starten des Explorer andere Probleme auf (ärgerlich wenn irgend
welche Tools im Tray liegen) und besonders Elegant ist es sicher auch nicht.

Frage, was ist an der obigen Routine falsch, bzw. wie kann ich den geänderten ShellState dem
Explorer unterjubeln ohne die harte Tour? Irgendwas mit Systemparameterinfo... oder so ????

Help Help Help

gruss andreas
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Change StartMenu

  Alt 28. Mär 2006, 16:47
Moin Andreas,

die Registry-Variante könntest Du noch einmal in Verbindung mit SendMessage, HWND_BROADCAST und WM_SETTINGCHANGE probieren, denn wenn Du die Einstellung manuell änderst, musst Du den Explorer ja auch nicht neu starten.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz