Windowsにおいて、プログラムから現在開いているエクスプローラーが開いているフォルダ一覧を取得する方法はありますか?言語は問いません。

❓ Prompt

Windowsにおいて、プログラムから現在開いているエクスプローラーが開いているフォルダ一覧を取得する方法はありますか?言語は問いません。

💬 Answer

Windows APIを使用して、現在開いているエクスプローラーのウィンドウが開いているフォルダ一覧を取得することができます。以下はC#でのサンプルコードです。

using System;
using System.Runtime.InteropServices;

class Program
{
    [DllImport("user32.dll")]
    private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

    [DllImport("user32.dll")]
    private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

    private const uint WM_USER = 0x400;
    private const uint BFFM_SETSELECTIONW = WM_USER + 103;

    static void Main(string[] args)
    {
        IntPtr hwnd = FindWindow("CabinetWClass", null);
        if (hwnd != IntPtr.Zero)
        {
            SendMessage(hwnd, BFFM_SETSELECTIONW, IntPtr.Zero, Marshal.StringToHGlobalUni("")); // ルートフォルダを設定する
        }
        else
        {
            Console.WriteLine("エクスプローラーウィンドウが開かれていません");
        }
    }
}

このコードでは、FindWindow関数を使用してCabinetWClassクラス名のウィンドウを探し、SendMessage関数を使用してBFFM_SETSELECTIONWメッセージを送信し、フォルダを選択しています。このコードを実行すると、エクスプローラーウィンドウが開かれている場合は、そのウィンドウが開いているフォルダが選択されます。

同一の内容をWindows Script Hostを用いて実現する方法はありますか?

❓ Prompt

同一の内容をWindows Script Hostを用いて実現する方法はありますか?

💬 Answer

はい、Windows Script Host(WSH)を使用して、現在開いているエクスプローラーウィンドウが開いているフォルダ一覧を取得することができます。以下はVBScriptでのサンプルコードです。

Set shell = CreateObject("Shell.Application")
Set windows = shell.Windows

For Each window in windows
    If InStr(1, window.FullName, "explorer.exe", vbTextCompare) > 0 Then
        Set folder = window.Document.Folder
        WScript.Echo folder.Path
    End If
Next

このコードでは、Shell.Applicationオブジェクトを使用して、現在開いているすべてのWindowsエクスプローラーウィンドウのコレクションを取得し、各ウィンドウのFullNameプロパティをチェックして、explorer.exeが含まれているかどうかを確認しています。エクスプローラーウィンドウが見つかった場合は、そのウィンドウのDocument.Folderプロパティを使用して、開かれているフォルダを取得し、WScript.Echoでフォルダのパスを出力します。

このスクリプトを実行すると、現在開いているすべてのエクスプローラーウィンドウが開いているフォルダのパスが表示されます。

Windows上のNode.JSからShell.Applicationオブジェクトを使用することはできますか?

❓ Prompt

Windows上のNode.JSからShell.Applicationオブジェクトを使用することはできますか?

💬 Answer