Per quel che riguarda la calcolatrice...
codice:
Option Explicit
Private Declare Function SHGetSpecialFolderLocation Lib "shell32.dll" (ByVal hwndOwner As Long _
, ByVal nFolder As Long, pidl As ITEMIDLIST) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32.dll" _
Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
Private Const CSIDL_DESKTOP = &H0 ' Desktop
Private Const CSIDL_PROGRAMS = &H2 ' Programmi
Private Const CSIDL_FAVORITES = &H6 ' Preferiti
Private Const CSIDL_STARTUP = &H7 ' Esecuzione automatica
Private Const CSIDL_RECENT = &H8 ' Recenti
Private Const CSIDL_SENDTO = &H9 ' SendTo
Private Const CSIDL_STARTMENU = &HB ' StartMenu
Private Const CSIDL_FONTS = &H14 ' Fonts
Private Const CSIDL_TEMPLATES = &H15 ' Modelli
Private Const CSIDL_NETHOOD = &H13 ' Risorse di rete
Private Const CSIDL_PERSONAL = &H5 ' MyDocuments
Private Function GetSpecialfolder(CSIDL As Long) As String
' Directory speciali
Dim sRetVal As String
Dim lRetVal As Long
Dim IDL As ITEMIDLIST
' ottiene la lista delle directory
lRetVal = SHGetSpecialFolderLocation(100, CSIDL, IDL)
If lRetVal = 0 Then
' Inizializza la stringa
sRetVal = Space$(512)
' recupera il path dalla lista
lRetVal = SHGetPathFromIDList(ByVal IDL.mkid.cb, ByVal sRetVal)
If InStr(sRetVal, Chr$(0)) > 0 Then sRetVal = Left$(sRetVal, InStr(sRetVal, Chr$(0)) - 1)
' return
GetSpecialfolder = sRetVal
End If
End Function
Private Function VisualizzaCartellaProgrammi() As String
VisualizzaCartellaProgrammi= GetSpecialfolder(CSIDL_PROGRAMS)
End Sub
e in un modulo...
codice:
Public Type SHITEMID
cb As Long 'Size of the ID (including cb itself)
abID As Byte 'The item ID (variable length)
End Type
Public Type ITEMIDLIST
mkid As SHITEMID
End Type
Con questo codice (che ho trovato qui tempo fa) ottieni il percorso della cartella programmi, che varia a seconda del SO.