potisanのプログラミングメモ

プログラミング素人です。昔の自分を育ててくれたネット情報に少しでも貢献できるよう、情報を貯めていこうと思っています。Windows環境のC++やC#がメインです。

2019-03-01から1ヶ月間の記事一覧

C++11 IMAGE_COR20_HEADERを取得する

概要 32ビット形式のPEファイルを生データとして解析してIMAGE_COR20_HEADER構造体を取得するサンプルコードです。実際にはIMAGE_COR20_HEADER構造体のメインであろうメタデータは今後の拡張に備えてフォーマット非公開なのでCLSID_CorMetaDataDispenserで公…

C# レジストリの間接文字列から対応するテキストリソースを抽出するクラス

概要 shlwapi.dllのSHLoadIndirectString関数を使用してレジストリで使用されるindirect string("@location,id"等)を元の文字列に変換するクラスとサンプルコードです。この表記は主にレジストリで使用され、DLLに含まれる文字列リソースを参照する場合に…

Win32 API リソースIDのマクロ

概要 Win32 APIのリソースIDの定義や操作で使用されるマクロの簡単な情報です。具体的には次のマクロの概要を説明します。 IS_INTRESOURCE MAKEINTRESOURCE[A/W] リソースIDは環境(32、64ビットあるいはA/W)に関わらず、16ビットの範囲内にあれば整数型、…

C# ドロップされたデータのフォーマット形式を列挙する

DragEventArgs eとComTypes.IDataObject型 DragDropイベントなどで使用されるe.DataはSystem.Windows.Forms.IDataObject型ですが、System.Runtime.InteropServices.ComTypes.IDataObject型(以下ComTypes.IDataObject型)へ明示的に変換することができます。…

C++ ドロップされたOLEデータオブジェクトのクリップボード形式実例

はじめに Windows 10 64 bit環境でウィンドウにドロップしたときのOLEデータオブジェクトに含まれるクリップボード形式の確認結果です。詳細は各自ご確認下さい。 出力例 デスクトップからPCをドロップ c0ca (Shell IDList Array) c0d3 (Preferred DropEffec…

C# SearchPath関数を使用して既定の順番でパスを検索する

C#

概要 Windowsではファイル名を指定された場合のパスの検索順序がレジストリに保存されており、「ファイル名を指定して実行」やLoadLibrary関数等ではこの順序が使用されます。この検索機能はSearchPath関数で公開されており、C#でもP/Invokeにより使用するこ…

C# SHObjectProperties関数を使用してファイル、プリンター、ボリュームのプロパティダイアログを開く

C#

概要 C#でファイル、プリンター、ボリュームのプロパティダイアログを開く方法にはSHFileOperationEx関数、IShellFolderインターフェイスとIContextMenuインターフェイス等がありますが、SHObjectProperties関数を使用することでより簡単に実現することがで…

C# P/Invoke時の文字列型マーシャリングの考察

C#

概要 文字列型の引数を伴うプラットフォーム呼び出し(P/Invoke)を実行するとき、引数の型によりマーシャリング動作が変わります。具体的にはC#側がstring/StringBuilder/byte型、プラットフォーム側(C/C++側)がLPWSTR/LPSTR(UnmanagedType.LPWStr/LPStr…

C# 文字列のANSI文字列→Unicode文字列変換時の注意

C#

概要 ANSI文字列(ここでは純粋なASCIIエンコーディングの文字列ではなくシステム上でANSI版として扱われる文字列。日本語ではShift-JISエンコーディングの文字列)を格納したバイト配列byte[]をstring型へ変換する場合等、ANSI文字列を扱う場合はエンコーデ…

C# 8-9 ASCII、Unicode、システムのANSIエンコーディングの概要を表示する

C#

追記20240903 現行のC# 12では$"""..."""形式で複数行の文字列補間を使用できます。このリテラル?はFormattableString型のオブジェクトとして使いまわせるので、静的関数の実装も不要です。 各種エンコーディング(ASCIIエンコーディング、Unicodeエンコー…