2010-03-04 6 views
2

Je crée un nouveau raccourci dans le menu Démarrer et le met à jour dans le menu Démarrer J'ai travaillé avec la variable d'environnement spécial ALLUSERSPROFILE et cela a fonctionné pour moi sous XP, il renvoie le bon chemin, lors de l'utilisation sous vista ir renvoie c: \ ProgramData qui est inutile. La lecture de la variable d'environnement StartMenu est également inutile car elle renvoie une chaîne vide. (Sur Vista, il se trouve sous Windows \ Menu Démarrer, en anglais, et si le dossier d'installation Windows a le nom par défaut) Est-ce que quelqu'un a une idée comment obtenir le répertoire startmenu pour le «Tous les utilisateurs» et serait-ce un ?. solution générique qui fonctionne sous XP et VistaAtteindre le menu Démarrer sous Windows Vista et 7

Répondre

4

vous voulez CSIDL_COMMON_STARTMENU Cela ne semble pas être définie dans l'énumération Environment.SpecialFolders, mais vous pouvez utiliser le Win32 API via P/Invoke:

[DllImport("shell32.dll")] 
static extern bool SHGetSpecialFolderPath(IntPtr hwndOwner, 
    [Out] StringBuilder lpszPath, int nFolder, bool fCreate); 

int CSIDL_COMMON_STARTMENU = 0x16; 
StringBuilder path = new StringBuilder(260); 
SHGetSpecialFolderPath(IntPtr.Zero, path, CSIDL_COMMON_STARTMENU, false); 

CSIDL_COMMON_STARTMENU (FOLDERID_CommonStartMenu) Le répertoire du système de fichiers qui contient les programmes et les dossiers qui apparaissent dans le menu Démarrer pour tous les utilisateurs . Un chemin typique est C: \ Documents et Settings \ All Users \ Start Menu. Valable uniquement pour les systèmes Windows NT.

+0

IS est seulement valide pour Systèmes NT? – jmayor

+0

@jmayor: Oui. Êtes-vous préoccupé par Windows 98? – SLaks

+0

@jmayor: "Windows NT" est généralement utilisé dans MSDN pour désigner les systèmes d'exploitation "NT-lineage" (NT, 2k, XP, Vista, 7), par opposition à Windows "classique" (3.1, 95, 98, Me). –

0

regardant sous le registre que j'ai trouvé la clé suivante HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell Folders il y a une valeur nommée Menu Démarrer commune qui contient le chemin. Il fonctionne sur Vista et XP

+0

Ne le lisez pas du registre. Utilisez des API documentées à la place. Ces valeurs ne sont pas créées avant l'appel de certaines API Shell.Vous découvrirez cela si vous démarrez à partir d'une nouvelle installation de Windows et ajoutez la restauration du système à votre processus de test. –

1

Il n'y a pas d'API Win32 nécessaire et aucun accès au registre manuellement. J'utilise Microsoft Framework 4.0 et peut faire ce qui suit avec succès sous Win7 et XP:

Dim diStartMenu As New IO.DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.CommonStartMenu)) 
fiShortCut = New IO.FileInfo(IO.Path.Combine(diStartMenu.FullName, ApplicationTitle & ".lnk")) 

ce retourne le chemin suivant pour diStartMenu:

C:\ProgramData\Microsoft\Windows\Start Menu 

cette corresponse pleinement avec la valeur de registre dans

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders 
Questions connexes