DOBON.NET DOBON.NETプログラミング掲示板過去ログ

「すべてのユーザー」のフォルダパスの取得

環境/言語:[環境:WindowsXPProSP2 使用言語:VS2005/C#]
分類:[.NET]

こんにちは。

VisualStudio2005/C#を使用して
開発を行っております。

すべてのユーザーのデスクトップまたはスタートアップに
ショートカットを作成するために
パスの取得を行いたいのですが
取得方法がわかりません。

Environment.SpecialFolderで取得できるのは
ユーザーのデスクトップやスタートアップのパスのみで
すべてのユーザーのデスクトップやスタートアップのパスは
簡単に取得できないものなのでしょうか?

いろいろと検索をしていましたら
VBScriptで「WScript.Shell」を使用して
取得しているのを見つけたので
C#でも同様にできないものかと試してみました。

using IWshRuntimeLibrary;

[中略]

WshShellClass wsh = new WshShellClass();
string pathStartup = wsh.SpecialFolders("AllUsersStartup");

としてみたのですが
「エラー 11 'IWshRuntimeLibrary.WshShellClass.SpecialFolders' は 'プロパティ' ですが、'メソッド' のように使用されています。」
とエラーになってしまいました。
エラーのとおり使用方法が間違えているのはわかるのですが
どのように使用したらよいのかわかりません。

この方法でなくても構いません。
何か取得方法をご存知の方がいらっしゃいましたら
ご教授ください。

よろしくお願い致します。
■No23398に返信(ぺぐさんの記事)
> VBScriptで「WScript.Shell」を使用して
> 取得しているのを見つけたので
> C#でも同様にできないものかと試してみました。

C# でも使えますよ。個人的には、あまりおすすめはしませんけれども。

WshShellClass wsh = new WshShellClass();
IWshCollection folders = wsh.SpecialFolders;
object s = "AllUsersStartup";
object o = folders.Item(ref s);
string pathStartup = (string)o;
Marshal.ReleaseComObject(folders);
Marshal.ReleaseComObject(wsh);


おまけ。
http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/d444c613-337b-4386-96d2-ea6984f62ebe/
魔界の仮面弁士様
返信ありがとうございます。


> C# でも使えますよ。個人的には、あまりおすすめはしませんけれども。
ということは
使うと何か不都合があるのでしょうか?

> おまけ。
> http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/d444c613-337b-4386-96d2-ea6984f62ebe/

教えていただいたページを
英語は得意ではないのですが
がんばって解読して
試してみようと思います。
解読できなかったら
教えていただいた
> WshShellClass wsh = new WshShellClass();
> IWshCollection folders = wsh.SpecialFolders;
> object s = "AllUsersStartup";
> object o = folders.Item(ref s);
> string pathStartup = (string)o;
> Marshal.ReleaseComObject(folders);
> Marshal.ReleaseComObject(wsh);
この方法を試してみようと思います。

ありがとうございました。
魔界の仮面弁士様に教えていただいた

>>おまけ。
>>http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/d444c613-337b-4386-96d2-ea6984f62ebe/

こちらのページを参考に
「shell32.dll」を使用した方法で
うまくパスを取得することができました。

----------------------------------------------------------------------
public const int CSIDL_COMMON_STARTUP = 0x18; // All Users\Startup

[DllImport("shell32.dll", CharSet = CharSet.Auto)]

internal static extern int SHGetFolderPath(IntPtr hwndOwner, int nFolder, IntPtr hToken, int dwFlags, StringBuilder lpszPath);
----------------------------------------------------------------------

大変助かりました。
ありがとうございました。

また壁にぶつかった際には
ご教授お願い致します。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板