none
Récupérer dossier Menu Démarrer All Users RRS feed

  • 質問

  • Bonjour,

    Pour trouver le Menu démarrer de l'utilisateur en VB 2008, je l'obtiens comme ceci :

    System.Environment.GetFolderPath(Environment.SpecialFolder.StartMenu)

    Mais comment récupérer dossier Menu Démarrer All Users ?

    Merci

    2012年10月11日 17:03

回答

  • Bonjour !

    Ca ne marche pas. CommonStartMenu ou 22 ne fait pas partie de Environment.SpecialFolder.

    J'ai essayé Shell("%ProgramData%\Microsoft\Windows\Start Menu") et même Process.Start("%ProgramData%\Microsoft\Windows\Start Menu") mais cela ne marche pas. Je ne sais pas comment utiliser les variables d'environnement.

    Mais j'ai touvé une variante (ca ressemble à du VB 6). Je ne sais pas si cela marche sur toutes les plate-formes.

    Dim WSHShell As Object = CreateObject("Wscript.Shell")

    Process.Start(WSHShell.SpecialFolders("AllUsersStartMenu"))

    Merci quand même.


    • 編集済み Michel56100 2012年10月12日 15:24
    • 回答としてマーク Aurel Bera 2012年10月15日 7:41
    2012年10月12日 15:15
  • Ca marche :
    System.Environment.ExpandEnvironmentVariables("%ProgramData%") & "\Microsoft\Windows\Start Menu"

    Merci ! Je vais essayer tout cela avec Virtual PC. Ah oui VBScript. J'adis, j'en utilisais beaucoup sur XP ou Windows 98 SE mais je ne m'étais jamais soucié de savoir si Windows Scripting Host était ou non installé. Je pensais qu'il l'était d'office.

    Merci encore.

    • 回答としてマーク Aurel Bera 2012年10月15日 7:41
    2012年10月12日 16:42

すべての返信

  • Bonjour MicSoft,

    Essayer :

    System.Environment.GetFolderPath(Environment.SpecialFolder.CommonStartMenu)
    dont la valeur de la constante est 22, et le chemin par défaut : %ProgramData%\Microsoft\Windows\Start Menu.


    Cordialement, Jacques


    • 編集済み Jacques93 2012年10月12日 2:56
    2012年10月12日 2:47
  • Bonjour !

    Ca ne marche pas. CommonStartMenu ou 22 ne fait pas partie de Environment.SpecialFolder.

    J'ai essayé Shell("%ProgramData%\Microsoft\Windows\Start Menu") et même Process.Start("%ProgramData%\Microsoft\Windows\Start Menu") mais cela ne marche pas. Je ne sais pas comment utiliser les variables d'environnement.

    Mais j'ai touvé une variante (ca ressemble à du VB 6). Je ne sais pas si cela marche sur toutes les plate-formes.

    Dim WSHShell As Object = CreateObject("Wscript.Shell")

    Process.Start(WSHShell.SpecialFolders("AllUsersStartMenu"))

    Merci quand même.


    • 編集済み Michel56100 2012年10月12日 15:24
    • 回答としてマーク Aurel Bera 2012年10月15日 7:41
    2012年10月12日 15:15
  • Sous VB2010, avec Framework 4 Client Profile, Environment.SpecialFolder.CommonStartMenu fonctionne correctement.

    Une autre solution serait d'utiliser l'API 'SHGetFolderPath', ici adaptée d'un truc fait en VB6 il y a quelques années:

        Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
            MessageBox.Show(GetFolderPath(CSIDL_VALUES.CSIDL_COMMON_STARTMENU))
        End Sub
    
        Private Enum CSIDL_VALUES
            CSIDL_DESKTOP = &H0                    ' <desktop>
            CSIDL_INTERNET = &H1                   ' Internet Explorer (icon on desktop)
            CSIDL_PROGRAMS = &H2                   ' Start Menu\Programs
            CSIDL_CONTROLS = &H3                   ' My Computer\Control Panel
            CSIDL_PRINTERS = &H4                   ' My Computer\Printers
            CSIDL_PERSONAL = &H5                   ' My Documents
            CSIDL_FAVORITES = &H6                  ' <user name>\Favorites
            CSIDL_STARTUP = &H7                    ' Start Menu\Programs\Startup
            CSIDL_RECENT = &H8                     ' <user name>\Recent
            CSIDL_SENDTO = &H9                     ' <user name>\SendTo
            CSIDL_BITBUCKET = &HA                  ' <desktop>\Recycle Bin
            CSIDL_STARTMENU = &HB                  ' <user name>\Start Menu
            CSIDL_MYDOCUMENTS = &HC                ' logical "My Documents" desktop icon
            CSIDL_MYMUSIC = &HD                    ' "My Music" folder
            CSIDL_MYVIDEO = &HE                    ' "My Videos" folder
            CSIDL_DESKTOPDIRECTORY = &H10          ' <user name>\Desktop
            CSIDL_DRIVES = &H11                    ' My Computer
            CSIDL_NETWORK = &H12                   ' Network Neighborhood (My Network Places)
            CSIDL_NETHOOD = &H13                   ' <user name>\nethood
            CSIDL_FONTS = &H14                     ' windows\fonts
            CSIDL_TEMPLATES = &H15
            CSIDL_COMMON_STARTMENU = &H16          ' All Users\Start Menu
            CSIDL_COMMON_PROGRAMS = &H17           ' All Users\Start Menu\Programs
            CSIDL_COMMON_STARTUP = &H18            ' All Users\Startup
            CSIDL_COMMON_DESKTOPDIRECTORY = &H19   ' All Users\Desktop
            CSIDL_APPDATA = &H1A                   ' <user name>\Application Data
            CSIDL_PRINTHOOD = &H1B                 ' <user name>\PrintHood
            CSIDL_LOCAL_APPDATA = &H1C             ' <user name>\Local Settings\Applicaiton Data (non roaming)
            CSIDL_ALTSTARTUP = &H1D                ' non localized startup
            CSIDL_COMMON_ALTSTARTUP = &H1E         ' non localized common startup
            CSIDL_COMMON_FAVORITES = &H1F
            CSIDL_INTERNET_CACHE = &H20
            CSIDL_COOKIES = &H21
            CSIDL_HISTORY = &H22
            CSIDL_COMMON_APPDATA = &H23            ' All Users\Application Data
            CSIDL_WINDOWS = &H24                   ' GetWindowsDirectory()
            CSIDL_SYSTEM = &H25                    ' GetSystemDirectory()
            CSIDL_PROGRAM_FILES = &H26             ' C:\Program Files
            CSIDL_MYPICTURES = &H27                ' C:\Program Files\My Pictures
            CSIDL_PROFILE = &H28                   ' USERPROFILE
            CSIDL_SYSTEMX86 = &H29                 ' x86 system directory on RISC
            CSIDL_PROGRAM_FILESX86 = &H2A          ' x86 C:\Program Files on RISC
            CSIDL_PROGRAM_FILES_COMMON = &H2B      ' C:\Program Files\Common
            CSIDL_PROGRAM_FILES_COMMONX86 = &H2C   ' x86 Program Files\Common on RISC
            CSIDL_COMMON_TEMPLATES = &H2D          ' All Users\Templates
            CSIDL_COMMON_DOCUMENTS = &H2E          ' All Users\Documents
            CSIDL_COMMON_ADMINTOOLS = &H2F         ' All Users\Start Menu\Programs\Administrative Tools
            CSIDL_ADMINTOOLS = &H30                ' <user name>\Start Menu\Programs\Administrative Tools
            CSIDL_CONNECTIONS = &H31               ' Network and Dial-up Connections
            CSIDL_COMMON_MUSIC = &H35              ' All Users\My Music
            CSIDL_COMMON_PICTURES = &H36           ' All Users\My Pictures
            CSIDL_COMMON_VIDEO = &H37              ' All Users\My Video
            CSIDL_RESOURCES = &H38                 ' Resource Direcotry
            CSIDL_RESOURCES_LOCALIZED = &H39       ' Localized Resource Direcotry
            CSIDL_COMMON_OEM_LINKS = &H3A          ' Links to All Users OEM specific apps
            CSIDL_CDBURN_AREA = &H3B               ' USERPROFILE\Local Settings\Application Data\Microsoft\CD Burning
            'unused = &H3C
            CSIDL_COMPUTERSNEARME = &H3D           ' Computers Near Me (computered from Workgroup membership)
    
            CSIDL_FLAG_PER_USER_INIT = &H800       ' combine with CSIDL_ value to indicate per-user init (eg. upgrade)
            CSIDL_FLAG_NO_ALIAS = &H1000           ' combine with CSIDL_ value to insure non-alias versions of the pidl
            CSIDL_FLAG_DONT_VERIFY = &H4000        ' combine with CSIDL_ value to return an unverified folder path
            CSIDL_FLAG_CREATE = &H8000             ' combine with CSIDL_ value to force folder creation in SHGetFolderPath()
            CSIDL_FLAG_MASK = &HFF00               ' mask for all possible flag values
        End Enum
    
        Private Const SHGFP_TYPE_CURRENT = &H0 'current value for user, verify it exists
        Private Const SHGFP_TYPE_DEFAULT = &H1
        Private Const MAX_LENGTH = 260
        Private Const S_OK = 0
    
        Private Function GetFolderPath(ByVal csIDL As Long, _
                                  Optional SHGFP_TYPE As Long = SHGFP_TYPE_CURRENT, _
                                  Optional dwFlags As Long = CSIDL_VALUES.CSIDL_FLAG_PER_USER_INIT Or _
                                                             CSIDL_VALUES.CSIDL_FLAG_NO_ALIAS Or _
                                                             CSIDL_VALUES.CSIDL_FLAG_DONT_VERIFY) As String
            Dim Buf As String
    
            'fill buffer with the specified folder item
            Buf = Space(MAX_LENGTH)
    
            If SHGetFolderPath(0&, _
                               csIDL Or dwFlags, _
                               -1, _
                               SHGFP_TYPE, _
                               Buf) = S_OK Then
    
                GetFolderPath = Buf 'TrimNull(Buf)
            Else
                GetFolderPath = "Non défini"
            End If
        End Function
    
        Private Declare Function SHGetFolderPath Lib "shfolder.dll" _
            Alias "SHGetFolderPathA" _
            (ByVal hwndOwner As Integer, _
             ByVal nFolder As Integer, _
             ByVal hToken As Integer, _
             ByVal dwReserved As Integer, _
             ByVal lpszPath As String) As Integer


    Cordialement, Jacques

    2012年10月12日 15:34
  • Ah, j'avais précisé VB 2008. ;)

    Oui, je me rappelle vaguement de cela. Une page de code pour afficher un dossier. :)

    Je garde cela au chaud que je mettrai dans un module séparément.

    Merci !

    2012年10月12日 15:42
  • Pour utiliser les variables d'environnement :

    Imports System.Environment
    
    '
    
    MessageBox.Show(ExpandEnvironmentVariables("%ProgramData%") & "\Microsoft\Windows\Start Menu")

    toujours en VB2010 et Framework 4.0 Client Profile. A vérifier sous VB2008.

    La variante que tu indiques est en fait du VBScript. Ca devrait fonctionner, sous réserve que sur les plate-formes XP, Windows Scripting Host soit installé. C'est le cas sur les versions postérieures : Vista, Windows 7, Windows 8.


    Cordialement, Jacques

    2012年10月12日 15:56
  • Oui j'avais zappé VB2008, mais il faisait pas jour !!!

    Tu n'as besoin de l'info que pour un dossier, mais le code contient les constantes pour près de soixante dossier : plus fort que VB2008 :-p


    Cordialement, Jacques

    2012年10月12日 16:06
  • Ca marche :
    System.Environment.ExpandEnvironmentVariables("%ProgramData%") & "\Microsoft\Windows\Start Menu"

    Merci ! Je vais essayer tout cela avec Virtual PC. Ah oui VBScript. J'adis, j'en utilisais beaucoup sur XP ou Windows 98 SE mais je ne m'étais jamais soucié de savoir si Windows Scripting Host était ou non installé. Je pensais qu'il l'était d'office.

    Merci encore.

    • 回答としてマーク Aurel Bera 2012年10月15日 7:41
    2012年10月12日 16:42
  • Oui ma mémoire me joue des tours, c'est effectivement assez ancien

        WSH

    mais les évolutions furent assez fréquentes dans sa jeunesse, et liées aux versions d'OS et d'IE.


    Cordialement, Jacques

    2012年10月12日 17:07
  • Bonjour,

    Pouvons-nous considérer que vous avez résolu votre problème avec les scénarios proposés ? Dans l'affirmative, pourriez-vous partager avec nous la solution, afin que d'autres personnes avec le même problème puissent profiter de cette solution ?

    Désormais, nous marquons les solutions proposées. N'hésitez pas à revenir et supprimer la réponse marquée si la solution n’est pas correcte. Merci !

    Cordialement,

    Aurel


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    2012年10月15日 7:43
  • Bonjour,

    Oui, je pense qu'elle est résolue bien que je n'ai pas pu tester cela par tout mais je pense qu'avec ces informations, j'arriverai à mes fins.

    Toutefois, Je ne sais pas comment marquer ma question comme résolue. Suffit-il de cliquer sur "Marquer comme réponse" ?

    Cordialement.

    2012年10月15日 10:03