カップ麺シリーズ:C#でSHGetFileInfoをDllImportからLibraryImportに書き換え

最低限DllImportの使い方を理解している方を対象にしています。この記事をコピペで利用した際の責任は一切負いません あの、C# で Windowsのファイルアイコンやら色々な情報を獲得する SHGetFileInfo の宣言を、DllImportからLibraryImportに書き換えて、憎きSYSLIB1054を一つ撲滅する方法をお伝えします。 まず、C# での DllImportのパターンは、よく見るのはこういう宣言ですね。 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] public struct SHFILEINFO { public IntPtr hIcon; public int iIcon; public uint dwAttributes; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string szDisplayName; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)] public string szTypeName; }; [DllImport("shell32.dll", CharSet = CharSet.Unicode)] private static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttribs, ref SHFILEINFO psfi, uint cbFileInfo, SHGFI uFlags); そして SHGETFILEINFO の使い方はこんな感じですよね? SHFILEINFO shinfo = new(); IntPtr shFileInfoResult; // ここ shFileInfoResult = SHGetFileInfo(path, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), SHGFI.SHGFI_ICON | SHGFI.SHGFI_SMALLICON | SHGFI.SHGFI_TYPENAME); if (shFileInfoResult == IntPtr.Zero || shinfo.hIcon == IntPtr.Zero) { int lastError = Marshal.GetLastWin32Error(); throw new Exception($"SHGetFileInfo Failed with error code {lastError}"); } BitmapSource icon = Imaging.CreateBitmapSourceFromHIcon(shinfo.hIcon, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); DestroyIcon(shinfo.hIcon); // あとはiconとshinfo.szTypeNameでアイコンとファイル種類が手に入る で、今となっては C# の DllImport を使った SHGetFileInfo に警告 SYSLIB1054 が出てくる、という状況です。 ...

2023年12月14日 · (0001年01月01日 更新) · 2 分 · ☨もりゃき.xyz☨

TwitterとFacebookをBANしました

えっと、WPF Prismの記事更新を放置しながら申し訳ないのですが… TwitterとFacebookを、俺からBANしました。 ...

2020年12月03日 · (0001年01月01日 更新) · 1 分 · ☨もりゃき.xyz☨

Windowsベースのショートカット論考

まずは、Windowsの「Ctrl」と組み合わせて使われる、一般的なショートカットを列挙しよう。 これは、Windows7のユーザーエクスペリエンスガイドラインから抜粋したものとなる。 ...

2020年01月06日 · (2025年04月23日 更新) · 1 分 · ☨もりゃき.xyz☨

rdpまわり雑まとめ

結論:VNCよりRDP使っとけばよさそう。 ...

2019年11月26日 · (0001年01月01日 更新) · 1 分 · ☨もりゃき.xyz☨

Huawei Mediapad T2 10.0にLineageOS導入

Huawei Mediapad T2 10.0 Proへのカスタムロム導入。 やりたいなー、けど踏ん切り付かないなぁ、と思っていたタブレット(Android 5.1!)への、カスタムロム LineageOS を入れるか否かを某SNSでアンケート取ったところ… ...

2019年11月21日 · (0001年01月01日 更新) · 1 分 · ☨もりゃき.xyz☨

Realforceの修理記録

「Realforceの修理」と書くと、なんか凄い話に見えてしまうが、ただの断線修理です。 こちらの写真をご覧ください… ...

2019年10月14日 · (0001年01月01日 更新) · 1 分 · ☨もりゃき.xyz☨

ショートカットキーの乱立に物申す

あちこちで勝手に作られるショートカットキー達! 結論から言う。 ショートカットキー、お前ら全員一旦捌けてくれる? ...

2019年03月31日 · (0001年01月01日 更新) · 1 分 · ☨もりゃき.xyz☨

Windowsはこの先生きのこるか?

挑発的な文面で申し訳ない。ただ、どうもWindowsは10で終わる気がしてならない。 それは永遠のバージョンアップというお題目的な意味ではなく、終焉という意味での終わり。 その気持ちを今、記しておきたかった。 ...

2017年10月16日 · (0001年01月01日 更新) · 1 分 · ☨もりゃき.xyz☨

エクスプローラーからコマンドプロンプト@Windows10 Creators Update

エクスプローラーのハック、というのは少し大げさだが、アイコンや(右クリックで開く)コンテキストメニュー、ファイル関連付けなどはレジストリに登録されている。 ...

2017年05月17日 · (2017年07月11日 更新) · 1 分 · ☨もりゃき.xyz☨

「UNIXという考え方」読了

オーム社「UNIXという考え方 その設計思想と哲学」Mike Gancarz(著) 芳尾 桂(訳) 最近「一文一文かみしめるように読む」傾向が強くなりすぎてたので、理解度は70%程度でもサクサク読書を進めてみようと気変わりし、本日読了。 ...

2017年03月12日 · (0001年01月01日 更新) · 1 分 · ☨もりゃき.xyz☨