c#でショートカットの日本語名を取得する
例えば、
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Accessories
をエクスプローラで開いてみ欲しい。
ペイント、電卓・・・等、日本語のショートカットが並んでいる。
このフォルダに対して、下記コードを実行する。
var files = Directory.GetFiles(@"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Accessories", "*", SearchOption.AllDirectories);
取得結果は、
ペイント => C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Accessories\Paint.lnk
電卓 => C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Accessories\Calculator.lnk
あれ?
そ、そんな!!
あ…ありのまま 今 起こった事を話すぜ!
僕の網膜には、ペイントって文字が写っているのに
実際はPaint.lnkだと!?
どうも、こういう事らしい
http://snow-white.cocolog-nifty.com/first/2010/01/windows-7-8b1c.html
諸事情あって、僕は"ペイント"とか"電卓"って文字列が欲しいのです。
まいったね。嵌ったね。恐怖したね。
ってわけで、解決策。
まず参照設定で Microsoft Shell Controls And Automation を追加します。
んで、
using Shell32;
を追加します。
そしたら、
var path = @"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Accessories\Paint.lnk"; var dirNm = Path.GetDirectoryName(path); var fileNm = Path.GetFileName(path); var shell = new Shell(); var f = shell.NameSpace(dirNm); var item = f.ParseName(fileNm); var jpName = item.Name;
で日本語名が取得できます。
ふぅ。。