2019-01-01から1年間の記事一覧
C#の標準コントロール(Button、ColumnHeader)で実装されていないので気付きませんでしたが、Button(標準コントロール)、Header(コモンコントロール)にスプリットボタン機能が追加されていました。 ButtonではウィンドウスタイルのBS_SPLITBUTTON、Head…
C#で現在使用されているMicrosoft Windows SDKの場所とバージョンを取得するにはレジストリを参照します。64ビット環境で32ビットアプリケーションを起動した場合、WOW64により異なるキーを参照してしまうことに注意してください。 レジストリキーの場所 HKE…
C#のImage.FromFileメソッドは戻り値のImage型オブジェクトが解放されるまでファイルがロックされる仕様が知られています。 この仕様を回避するため、File.OpenメソッドとImage.FromStreamメソッドを組み合わせた代替法が知られています。この代替法を使用し…
IShellItemインターフェイスをパスから作成して表示名、親フォルダとその表示名を取得するサンプルコードです。 using System; using System.Runtime.InteropServices; var item = default(IShellItem); try { item = NativeMethods.SHCreateItemFromParsing…
本文 Image.FromHbitmap関数で作成したビットマップのような一部のビットマップではBitmap.LockBitsメソッドが返すBitmapDataのStrideが負の値になります。このようなビットマップはボトムアップ形式と呼ばれ、Scan0はビットマップの最終列の最初のピクセル…
R.NETがすごいです。C#の標準機能では提供されない主成分分析やグラフ画像の作成を簡単かつ信頼できる方法で実行できます。詳細は以下のリンクから。また、Microsoft Visual Studio 2019であればNuGet パッケージマネージャーからプロジェクトへお手軽にイン…
2021/3/10:この記事は別のブログで投稿した記事を移動したものです。 C++17とSTLを用いた基本的な要素操作の方法の覚書です。 コンテナの要素を標準出力へ一括出力する ostream_iterator、cout/wcout、copyを組み合わせることで配列やコンテナクラス(vecto…
概要 32ビット形式のPEファイルを生データとして解析してIMAGE_COR20_HEADER構造体を取得するサンプルコードです。実際にはIMAGE_COR20_HEADER構造体のメインであろうメタデータは今後の拡張に備えてフォーマット非公開なのでCLSID_CorMetaDataDispenserで公…
概要 shlwapi.dllのSHLoadIndirectString関数を使用してレジストリで使用されるindirect string("@location,id"等)を元の文字列に変換するクラスとサンプルコードです。この表記は主にレジストリで使用され、DLLに含まれる文字列リソースを参照する場合に…
概要 Win32 APIのリソースIDの定義や操作で使用されるマクロの簡単な情報です。具体的には次のマクロの概要を説明します。 IS_INTRESOURCE MAKEINTRESOURCE[A/W] リソースIDは環境(32、64ビットあるいはA/W)に関わらず、16ビットの範囲内にあれば整数型、…
DragEventArgs eとComTypes.IDataObject型 DragDropイベントなどで使用されるe.DataはSystem.Windows.Forms.IDataObject型ですが、System.Runtime.InteropServices.ComTypes.IDataObject型(以下ComTypes.IDataObject型)へ明示的に変換することができます。…
はじめに Windows 10 64 bit環境でウィンドウにドロップしたときのOLEデータオブジェクトに含まれるクリップボード形式の確認結果です。詳細は各自ご確認下さい。 出力例 デスクトップからPCをドロップ c0ca (Shell IDList Array) c0d3 (Preferred DropEffec…
概要 Windowsではファイル名を指定された場合のパスの検索順序がレジストリに保存されており、「ファイル名を指定して実行」やLoadLibrary関数等ではこの順序が使用されます。この検索機能はSearchPath関数で公開されており、C#でもP/Invokeにより使用するこ…
概要 C#でファイル、プリンター、ボリュームのプロパティダイアログを開く方法にはSHFileOperationEx関数、IShellFolderインターフェイスとIContextMenuインターフェイス等がありますが、SHObjectProperties関数を使用することでより簡単に実現することがで…
概要 文字列型の引数を伴うプラットフォーム呼び出し(P/Invoke)を実行するとき、引数の型によりマーシャリング動作が変わります。具体的にはC#側がstring/StringBuilder/byte型、プラットフォーム側(C/C++側)がLPWSTR/LPSTR(UnmanagedType.LPWStr/LPStr…
概要 ANSI文字列(ここでは純粋なASCIIエンコーディングの文字列ではなくシステム上でANSI版として扱われる文字列。日本語ではShift-JISエンコーディングの文字列)を格納したバイト配列byte[]をstring型へ変換する場合等、ANSI文字列を扱う場合はエンコーデ…
追記20240903 現行のC# 12では$"""..."""形式で複数行の文字列補間を使用できます。このリテラル?はFormattableString型のオブジェクトとして使いまわせるので、静的関数の実装も不要です。 各種エンコーディング(ASCIIエンコーディング、Unicodeエンコー…