Windows
過去の投稿では関数を小分けにしていましたが、一つの機能としてまとめる関数を作成しても良いと思います。ついでに投稿後に追加されたトップレベルステートメントも使用しています。 using System.Runtime.InteropServices; Console.WriteLine(ShellIDListU…
以下の手順でWinFormsプロジェクトの依存フレームワークにMicrosoft.Windows.SDK.NET.Refが追加されて、ビルド後のファイルにWinRT.Runtime.dll (391 KB)とMicrosoft.Windows.SDK.NET.dll (200,076 KB)が追加されました。DLLは両方削除してもおそらく対応す…
C++と標準ライブラリで以前投稿したコードのC++23 PreviewとWILを使った書き直しです。ifのネストが消えたのはWILのおかげなので、C++20でもWIL、可能ならstd::functionalを使えば同程度に簡単にできると思います。 #include <format> #include <string> #include <iostream> #include <experimental/generator></experimental/generator></iostream></string></format>…
WIC(Windowsイメージングコンポーネント)を使って画像ファイルからDIBセクションを作成する方法です。WICはGDIでは扱いにくいアイコンやGIF、PNGを統一された方法でビットマップに変換できます。 以下のコードはC++20で動作するウィンドウアプリケーション…
公開された非公開関数NtQuerySystemInformationと非公開の定数SystemExtendedHandleInformation (0x40)を使うとカーネルオブジェクトハンドルの一覧を取得できます。固定長構造体のみなので前回投稿と比べれば遥かに扱いが楽です。なお、NtQuerySystemInform…
MicrosoftがGitHubでMITライセンス公開しているWILのGitHub Wikiの記事を和訳・改変したものです。素人による翻訳なので、誤訳や著作権上の問題などありましたらご連絡いただけますと幸いです。 シャットダウン認識オブジェクト(原題:Shutdown aware objec…
MicrosoftがGitHubでMITライセンス公開しているWILのGitHub Wikiからミューテックスハンドルの記事を和訳・改変したものです。素人による翻訳なので、誤訳や著作権上の問題などありましたらご連絡いただけますと幸いです。 ミューテックスハンドル(原題:Mu…
MicrosoftがGitHubでMITライセンス公開しているWILのGitHub Wikiの記事を和訳・改変したものです。素人による翻訳なので、誤訳や著作権上の問題などありましたらご連絡いただけますと幸いです。 ファイルシステムヘルパー(原題:File System Helpers (files…
MicrosoftがGitHubでMITライセンス公開しているWILのGitHub Wikiの記事を和訳・改変したものです。素人による翻訳なので、誤訳や著作権上の問題などありましたらご連絡いただけますと幸いです。 ロックガードオブジェクト(原題:Lock guard object) Raymon…
MicrosoftがGitHubでMITライセンス公開しているWILのGitHub Wikiの記事を和訳・改変したものです。素人による翻訳なので、誤訳や著作権上の問題などありましたらご連絡いただけますと幸いです。 カーネルオブジェクトの待機(原題:Waiting on kernel object…
ディレクトリ中のファイルを列挙するプログラムで列挙後のコードが実行されずに悩んでいたのですが、原因は検索ディレクトリ以下に含まれる循環したディレクトリのシンボリックリンクとtry構文による例外の握りつぶしでした。 ディレクトリに循環したシンボ…
エクスプローラーの検索ボックスで使える検索方法集です。詳細は末尾の公式ドキュメントを参照してください。Windowsのバージョンによっては内容が変わる可能性があります。 パターン指定 目的 記法 例 完全一致 ="キーワード" System.FileName:="テキスト.t…
8/30追記 下記のthiscall呼び出し規約を指定したコードはx64で動作しますが誤りです。COMメソッドはSTDMETHODやSTDMETHOD_マクロによりstdcall呼び出し規約が指定されます。x86ではECXレジスタ上のthisが無視されてエラーになるはずです。 WindowsのCOMオブ…
過去の投稿のコードをC# 12 (.NET 8)版に書き換えたものです。nintやオブジェクト初期化子により少し簡潔になります。 非unsafe版 unsafe版 非unsafe版 using System.ComponentModel; using System.Runtime.InteropServices; [assembly: DefaultDllImportSea…
SetupDi系関数でデバイスインターフェイスクラスGUIDが取得できずに悩んだので、学んだことを記録します。結論、デバイスインターフェイスクラスGUIDはSDKヘッダーファイルの定数使用が正攻法です。cfgmgr32も使えるならCM_Enumerate_Classesで列挙できます…
comtypesパッケージを使用したCOMのIShellItemクラスのラッパークラスです。comtypesの勉強用に作成したため、バグチェックやコメントは不十分です。 TODO: c_bool -> wintypes.BOOL shellitemパッケージ(ディレクトリ) queryassocパッケージ(ディレクト…
PowerShell 7のWMI寄りなメモを記載します。 Win32_*クラスの名前を列挙(Win32_PerfRawData_*とWin32_PerfFormattedData_*は除外) Get-CimClass -ClassName Win32_* -Namespace root/CIMV2 | Where-Object CimClassName -cnotmatch "Win32_(PerfRawData|Pe…
C# 12 (.NET 8.0)でNVMe接続されたSSDのS.M.A.R.T.情報を取得するコードです。前回のC++23用コードをほぼそのままC#へ移植したものです。詳細は前回記事をご参照ください。 プロジェクトは暗黙的なglobal usingの有効なコンソールプロジェクトでターゲットOS…
C++23 (MSVC Preview)とWin APIでNVMe接続されたSSDのS.M.A.R.T.情報を取得するコードです。SDKはNVMe用のヘッダーファイルnvme.hを含むので、APIの仕様さえ把握すれば取得できます。 C++23 (Preview)の使用はstd::expectedクラスを使うためなので、std::opt…
Windows11のMicrosoft Store更新対象にWinAppRuntime.Main.1.5とWinAppRuntime.Singletonが加わっていました。正体が気になったので調べたことをメモします。 機能は分かりませんが、ファイルサイズは昨今なら無視できるほど小さいことが分かりました。 追伸…
Firefox(Windows版)の閲覧履歴がSQLite形式で保存されることを知ったのですが、SQLite自体もそれをC#から触ったこともありませんでした。この記事はSQLiteを勉強しながら分かったことを追記する予定です。開発環境はMicrosoft Visual Studio 2022です。 SQ…
MicrosoftがGitHubでMITライセンス公開しているWILのGitHub Wikiの記事を和訳・改変したものです。素人による翻訳なので、誤訳や著作権上の問題などありましたらご連絡いただけますと幸いです。 ウィンドウ機能ヘルパー(原題:Windowing helpers) 使い方 …
以前の投稿でMDI子フォームはMDI親フォームの最大化時にサイズグリップが非表示になるWinFormsの仕様を紹介しました。この記事ではウィンドウメッセージとToolStripRendererを利用したサイズグリップの強制表示を紹介します。動作確認環境は.NET 8.0ですが、…
追伸:解決方法を別の記事に記載しました。 WinFormsでMDI子フォームにStatusStripを置くとMDI親フォームの最大化時にサイズグリップが消えます。GitHub上のソースコードを調べると設計上の仕様です。具体的には次の通りです。 StatusStripはサイズグリップ…
WinFormsのFormへのクリップボード監視機能の追加、コンポーネントとNativeWindowで思ったより簡単に実装できました。NativeWindowの理解が浅いので問題が残っているかもしれませんが、とりあえず動きはします。動作確認はC# 12 (.NET 8.0)ですが、名前空間…
メモ帳をアンインストールしたらファイルの新規作成からテキストファイルが消えました。修復過程で気付いた注意点を共有します。 「新規作成」項目の実体は拡張子単位のレジストリキーShellNew。HKCR直下の拡張子キーまたは拡張子キー直下のファイル型キーに…
Windows環境でLPWSTRからスマートポインタ的なBSTRを作成する方法には次の2通りあります。 _bstr_t(...) <comutil.h> wil::make_bstr(...) "wil/com.h" 前者の_bstr_t(...)はコンパイラ付属なので追加インストールが不要ですが、ムーブセマンティクス非対応で独自の参照</comutil.h>…
レジストリでURL Protocol値の設定されたProgIDを列挙するコードです。Get-ItemPropertyコマンドレットは-Nameに配列を与えれば対応する複数値を取得できることを利用しています。 # 呼び出し側のスコープにHKCRを登録します。 function Register-HKCR { [Ou…
DirectShowを使ってビデオキャプチャデバイスの情報を取得するコードです。ネット上で様々な方がコードを公開しているコードをWIL対応にしたようなコードです。一部の情報はMicrosoft Docsの「キャプチャ デバイスの選択」を参考にしています。 #include <string> #d</string>…
PowerShell 7で登録された拡張子のProgIDとProgIDの概要を取得するサンプルコードです。-Pathと-LiteralPathの挙動の違い、Get-ItemPropertyによる高速化(Get-ChildItem比)等を確認するためのコードです。 #呼び出し側のスコープにHKCRを登録します。 func…