DOBON.NETプログラミング道掲示板
(現在 過去ログ1 を表示中)

[ 最新記事及び返信フォームをトピックトップへ ]

■33133 / inTopicNo.1)  1回目だけ指定したファイルを選択してフォルダを開けない
  
□投稿者/ がおおおお 一般人(3回)-(2015/10/06(Tue) 10:30:15)
  • アイコン環境/言語:[Windows 10 Pro 32bit / Visual Studio Community 2015 / C#] 
    分類:[.NET] 

    例えば C:\Folder1 の中に 001.jpg 〜 300.jpg という連番ファイルがあり、
    200.jpg というファイルを選択してフォルダを開くには以下の文を実行します。
    Process.Start("EXPLORER.EXE", @"/select,""C:\Folder1\200.jpg""");
    これは予定通りファイルが選択されている状態でフォルダが開きます。

    次に Folder1 を Folder2 という名前で丸ごとコピーし
    以下の文を実行するとファイルが選択されて「いない」状態でフォルダが開きます。
    Process.Start("EXPLORER.EXE", @"/select,""C:\Folder2\200.jpg""");

    再度以下の文を実行するとファイルが選択されて「いる」状態でフォルダが開きます。
    Process.Start("EXPLORER.EXE", @"/select,""C:\Folder2\200.jpg""");

    次に Folder2 を Folder3 という名前で丸ごとコピーし
    以下の文を実行するとファイルが選択されて「いない」状態でフォルダが開きます。
    Process.Start("EXPLORER.EXE", @"/select,""C:\Folder3\200.jpg""");

    再度以下の文を実行するとファイルが選択されて「いる」状態でフォルダが開きます。
    Process.Start("EXPLORER.EXE", @"/select,""C:\Folder3\200.jpg""");

    つまり新しく作られたフォルダに対して select を指定しても1回目だけは正しく表示されません。
    2回目以降は何度実行しても正しく表示されます(10回程度しか試していませんが)。

    1回目から正しく表示する方法をご存知の方はいらっしゃいませんでしょうか?

引用返信 削除キー/
■33135 / inTopicNo.2)  Re[1]: 1回目だけ指定したファイルを選択してフォルダを開けない
□投稿者/ がおおおお 一般人(4回)-(2015/10/06(Tue) 13:14:23)
  • アイコンごめんなさい。
    いろいろ調べていたら SHOpenFolderAndSelectItems を使う方法を見つけました。
    http://stackoverflow.com/questions/22578757/open-a-folder-in-windows-explorer-and-select-a-file-works-second-time-only
    http://stackoverflow.com/questions/3018002/c-how-to-use-shopenfolderandselectitems

    private void SelectInFileExplorer(string fullPath)
    {
    if (string.IsNullOrEmpty(fullPath))
    throw new ArgumentNullException("fullPath");

    fullPath = Path.GetFullPath(fullPath);

    IntPtr pidlList = NativeMethods.ILCreateFromPathW(fullPath);
    if (pidlList != IntPtr.Zero)
    try
    {
    // Open parent folder and select item
    Marshal.ThrowExceptionForHR(NativeMethods.SHOpenFolderAndSelectItems(pidlList, 0, IntPtr.Zero, 0));
    }
    finally
    {
    NativeMethods.ILFree(pidlList);
    }
    }

    static class NativeMethods
    {
    [DllImport("shell32.dll", ExactSpelling=true)]
    public static extern void ILFree(IntPtr pidlList);

    [DllImport("shell32.dll", CharSet=CharSet.Unicode, ExactSpelling=true)]
    public static extern IntPtr ILCreateFromPathW(string pszPath);

    [DllImport("shell32.dll", ExactSpelling=true)]
    public static extern int SHOpenFolderAndSelectItems(IntPtr pidlList, uint cild, IntPtr children, uint dwFlags);
    }
解決み!
引用返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Mode/  Pass/


- Child Tree -