これをCOMの方法で解決したい場合は、どのCOM参照をVBプロジェクトに追加するかを理解する必要があります。
regedit を開き、に移動します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)