如果你想用COM方式解决这个问题,你需要弄清楚在VB项目中添加哪个COM引用。
打开注册表编辑器,导航到 HKEY_CLASSES_ROOT\<class id>\CLSID
,例如:
HKEY_CLASSES_ROOT\Shell.Application\CLSID
你可以找到唯一标识COM组件的类别ID。
在 HKEY_CLASSES_ROOT\CLSID
下面,现在可以查找COM组件背后的文件:
HKEY_CLASSES_ROOT\CLSID\{13709620-C279-11CE-A49E-444553540000}\InProcServer32
显示以下值:
%SystemRoot%\system32\SHELL32.dll
现在打开Visual Studio,在“添加引用”对话框的“浏览”选项卡中添加对此文件的引用。如果您打开项目属性,您实际上会看到添加的COM组件的漂亮名称是“Microsoft Shell Controls and Automation”。
一旦添加了引用,您可以按以下方式使用“Shell.Application”对象:
Option Strict On
Module PrintStartMenuLocation
Sub Main()
Dim shell As New Shell32.Shell
Dim folder As Shell32.Folder
Dim folderItem As Shell32.FolderItem
Dim startMenuPath As String
folder = shell.NameSpace(Shell32.ShellSpecialFolderConstants.ssfSTARTMENU)
folderItem = CType(folder.Items(0), Shell32.FolderItem)
startMenuPath = folderItem.Path
Console.WriteLine(startMenuPath)
End Sub
End Module
一份C#版本的代码如下所示:
class Program
{
static void Main(string[] args)
{
Shell32.Shell shell = new Shell32.Shell();
Shell32.Folder folder = shell.NameSpace(Shell32.ShellSpecialFolderConstants.ssfSTARTMENU);
Shell32.FolderItem folderItem = folder.Items().Item(0) as Shell32.FolderItem;
string startMenuPath = folderItem.Path;
Console.WriteLine(startMenuPath);
}
}
然而,如果您只需要检索“开始菜单”文件夹的位置,则可以直接在.NET中执行相同的操作。
Dim path As String = System.Environment.GetFolderPath(Environment.SpecialFolder.StartMenu)