フォルダのアイコンを変更したいです。
解決済
回答 2
投稿
- 評価
- クリップ 1
- VIEW 2,772
こんにちは。
Windows10でC#のアプリケーションを開発しています。
Visual Studio 2015 Communityを使っています。
前提・実現したいこと
フォルダのアイコンを変更したいです。
C:\tmp\foldericonA.ico
C:\tmp\foldericonB.ico
C:\tmp\foldericonC.ico
があるとします。
プログラム上から、
Directory.CreateDirectory(@"C:\tmp\A");
Directory.CreateDirectory(@"C:\tmp\B");
Directory.CreateDirectory(@"C:\tmp\C");
としたとき、AフォルダのアイコンをfoldericonA.icoに、BをB.icoに、Cをc.icoにする、ということを、C#で書くことはできるのでしょうか?
該当のソースコード
Directory.CreateDirectory(@"C:\tmp\A");
Directory.CreateDirectory(@"C:\tmp\B");
Directory.CreateDirectory(@"C:\tmp\C");
補足情報(言語/FW/ツール等のバージョンなど)
Microsoft Visual Studio Community 2015
Version 14.0.25424.00 Update 3
Microsoft .NET Framework
Version 4.6.01038
インストールしているバージョン:Community
Visual C# 2015 00322-20000-00000-AA575
Microsoft Visual C# 2015
です。
よろしくお願いします。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+3
変えたいフォルダの中に desktop.ini
って名前のファイルを配置して IconResource
を設定しておくとフォルダアイコン変えれます
(修正)
すみません、ミスしていました。
desktop.ini
はフォルダじゃなくてファイルです。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
checkベストアンサー
0
Windowsフォルダアイコンの変更
このような情報がありました。
・追記
リンク先のコードを試してみました。
public class SetFolderIcon
{
[DllImport("kernel32.dll")]
private static extern bool WritePrivateProfileString(
string lpAppName, string lpKeyName
, string lpString, string lpFileName);
[DllImport("shlwapi.dll")]
private static extern bool PathMakeSystemFolder(
string folderName);
private SetFolderIcon()
{
}
public static void SetIcon(string targetFolder, string iconFilePath, int iconIndex)
{
string desktopIni = System.IO.Path.Combine(targetFolder, "Desktop.ini");
WritePrivateProfileString(".ShellClassInfo", "IconFile", iconFilePath, desktopIni);
WritePrivateProfileString(".ShellClassInfo", "IconIndex", iconIndex.ToString(), desktopIni);
System.IO.FileInfo finfo = new System.IO.FileInfo(desktopIni);
finfo.Attributes |= System.IO.FileAttributes.Hidden;
PathMakeSystemFolder(targetFolder);
}
}
として
SetFolderIcon.SetIcon(フォルダパス, アイコンファイル名, 0);
としたところアイコンは変更されました。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.09%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2017/03/06 15:43
string folder = @"C:\Users\username\Desktop\green";
Dicertory.CreateDirectory(folder);
File.ApperdAllText(folder+@"\desktop.ini", "[.ShellClassInfo]\r\n"+
@"IconResource=C:\Users\username\Desktop\01.ico"+ "\r\n"+
@"IconFile=C:\Users\username\Desktop\01.ico"+ "\r\n"+
"IconIndex=0"+ "\r\n");
としてファイルは確認できたのですが、そのフォルダのアイコン、変わりませんねー。うーむ。
2017/03/06 19:55
GUIから変更した場合はすぐに変わりましたが、 desktop.ini をテキストファイルとして手動で編集する場合は書き換えてすぐやF5リロードでは更新されず explorer の再起動で適用されました。
explorer の再起動はフォルダを全部閉じてしまうなどの影響もあるので、YAmaGNZさんの方法のほうがよさそうです。
2017/03/07 00:08
エクスプローラの再起動は必須と思っていたので、ウィンドウズの再起動はしてみたのですが、それでも変わらなかったのです。なぜでしょうね…。う~む。