potisanのプログラミングメモ

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

Windows

C# シェルの「shell:~」形式からパスを取得する2

過去の投稿では関数を小分けにしていましたが、一つの機能としてまとめる関数を作成しても良いと思います。ついでに投稿後に追加されたトップレベルステートメントも使用しています。 using System.Runtime.InteropServices; Console.WriteLine(ShellIDListU…

C#&.NET 8.0 WinFormsプロジェクトの依存フレームワークにMicrosoft.Windows.SDK.NET.Refが追加された。

以下の手順でWinFormsプロジェクトの依存フレームワークにMicrosoft.Windows.SDK.NET.Refが追加されて、ビルド後のファイルにWinRT.Runtime.dll (391 KB)とMicrosoft.Windows.SDK.NET.dll (200,076 KB)が追加されました。DLLは両方削除してもおそらく対応す…

C++23 Preview&Win API&WIL WICコンポーネントの情報を取得する

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>…

C++&Win API WICを使った画像ファイルからDIBセクションの作成

WIC(Windowsイメージングコンポーネント)を使って画像ファイルからDIBセクションを作成する方法です。WICはGDIでは扱いにくいアイコンやGIF、PNGを統一された方法でビットマップに変換できます。 以下のコードはC++20で動作するウィンドウアプリケーション…

C++&Win API NtQuerySystemInformation関数とSystemExtendedHandleInformation (0x40)でカーネルオブジェクトハンドルの一覧取得

公開された非公開関数NtQuerySystemInformationと非公開の定数SystemExtendedHandleInformation (0x40)を使うとカーネルオブジェクトハンドルの一覧を取得できます。固定長構造体のみなので前回投稿と比べれば遥かに扱いが楽です。なお、NtQuerySystemInform…

WIL GitHub Wiki シャットダウン認識オブジェクトの和訳・改変

MicrosoftがGitHubでMITライセンス公開しているWILのGitHub Wikiの記事を和訳・改変したものです。素人による翻訳なので、誤訳や著作権上の問題などありましたらご連絡いただけますと幸いです。 シャットダウン認識オブジェクト(原題:Shutdown aware objec…

WIL GitHub Wiki ミューテックスハンドルの和訳・改変

MicrosoftがGitHubでMITライセンス公開しているWILのGitHub Wikiからミューテックスハンドルの記事を和訳・改変したものです。素人による翻訳なので、誤訳や著作権上の問題などありましたらご連絡いただけますと幸いです。 ミューテックスハンドル(原題:Mu…

WIL GitHub Wiki ファイルシステムヘルパーの和訳・改変

MicrosoftがGitHubでMITライセンス公開しているWILのGitHub Wikiの記事を和訳・改変したものです。素人による翻訳なので、誤訳や著作権上の問題などありましたらご連絡いただけますと幸いです。 ファイルシステムヘルパー(原題:File System Helpers (files…

WIL GitHub Wiki ロックガードオブジェクトの和訳・改変

MicrosoftがGitHubでMITライセンス公開しているWILのGitHub Wikiの記事を和訳・改変したものです。素人による翻訳なので、誤訳や著作権上の問題などありましたらご連絡いただけますと幸いです。 ロックガードオブジェクト(原題:Lock guard object) Raymon…

WIL GitHub Wiki カーネルオブジェクトの待機の和訳・改変

MicrosoftがGitHubでMITライセンス公開しているWILのGitHub Wikiの記事を和訳・改変したものです。素人による翻訳なので、誤訳や著作権上の問題などありましたらご連絡いただけますと幸いです。 カーネルオブジェクトの待機(原題:Waiting on kernel object…

C#&Windows ディレクトリの循環シンボリックリンクによるIOException

ディレクトリ中のファイルを列挙するプログラムで列挙後のコードが実行されずに悩んでいたのですが、原因は検索ディレクトリ以下に含まれる循環したディレクトリのシンボリックリンクとtry構文による例外の握りつぶしでした。 ディレクトリに循環したシンボ…

Windows エクスプローラーの検索ボックスを便利に使う(Windows Search 3x)

エクスプローラーの検索ボックスで使える検索方法集です。詳細は末尾の公式ドキュメントを参照してください。Windowsのバージョンによっては内容が変わる可能性があります。 パターン指定 目的 記法 例 完全一致 ="キーワード" System.FileName:="テキスト.t…

C# COMオブジェクトのメソッドをデリゲート経由で呼び出す。

8/30追記 下記のthiscall呼び出し規約を指定したコードはx64で動作しますが誤りです。COMメソッドはSTDMETHODやSTDMETHOD_マクロによりstdcall呼び出し規約が指定されます。x86ではECXレジスタ上のthisが無視されてエラーになるはずです。 WindowsのCOMオブ…

C# imageres.dll.munからProgressRingのリソース(PNGデータ)を読み込む C#12 (.NET 8)版

過去の投稿のコードをC# 12 (.NET 8)版に書き換えたものです。nintやオブジェクト初期化子により少し簡潔になります。 非unsafe版 unsafe版 非unsafe版 using System.ComponentModel; using System.Runtime.InteropServices; [assembly: DefaultDllImportSea…

Win API SetupDi系関数とデバイスインターフェイスクラスのメモ

SetupDi系関数でデバイスインターフェイスクラスGUIDが取得できずに悩んだので、学んだことを記録します。結論、デバイスインターフェイスクラスGUIDはSDKヘッダーファイルの定数使用が正攻法です。cfgmgr32も使えるならCM_Enumerate_Classesで列挙できます…

Python&Windows&comtypes IShellItem COMクラスのラッパークラス

comtypesパッケージを使用したCOMのIShellItemクラスのラッパークラスです。comtypesの勉強用に作成したため、バグチェックやコメントは不十分です。 TODO: c_bool -> wintypes.BOOL shellitemパッケージ(ディレクトリ) queryassocパッケージ(ディレクト…

PowerShell 7 覚書き WMI関係

PowerShell 7のWMI寄りなメモを記載します。 Win32_*クラスの名前を列挙(Win32_PerfRawData_*とWin32_PerfFormattedData_*は除外) Get-CimClass -ClassName Win32_* -Namespace root/CIMV2 | Where-Object CimClassName -cnotmatch "Win32_(PerfRawData|Pe…

C# 12&Win API NVMe接続SSDのS.M.A.R.T.情報を取得するコード

C# 12 (.NET 8.0)でNVMe接続されたSSDのS.M.A.R.T.情報を取得するコードです。前回のC++23用コードをほぼそのままC#へ移植したものです。詳細は前回記事をご参照ください。 プロジェクトは暗黙的なglobal usingの有効なコンソールプロジェクトでターゲットOS…

C++23&Win API NVMe接続SSDのS.M.A.R.T.情報を取得するコード

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…

Windows WinAppRuntime.Main.1.5とWinAppRuntime.Singleton

Windows11のMicrosoft Store更新対象にWinAppRuntime.Main.1.5とWinAppRuntime.Singletonが加わっていました。正体が気になったので調べたことをメモします。 機能は分かりませんが、ファイルサイズは昨今なら無視できるほど小さいことが分かりました。 追伸…

C# Firefox(Windows版)のプロファイルからSQLiteデータを読み込む

Firefox(Windows版)の閲覧履歴がSQLite形式で保存されることを知ったのですが、SQLite自体もそれをC#から触ったこともありませんでした。この記事はSQLiteを勉強しながら分かったことを追記する予定です。開発環境はMicrosoft Visual Studio 2022です。 SQ…

WIL GitHub Wiki ウィンドウ機能ヘルパーの和訳・改変

MicrosoftがGitHubでMITライセンス公開しているWILのGitHub Wikiの記事を和訳・改変したものです。素人による翻訳なので、誤訳や著作権上の問題などありましたらご連絡いただけますと幸いです。 ウィンドウ機能ヘルパー(原題:Windowing helpers) 使い方 …

C#&Win API MDI子フォームのStatusStripにサイズグリップを強制表示する。

以前の投稿でMDI子フォームはMDI親フォームの最大化時にサイズグリップが非表示になるWinFormsの仕様を紹介しました。この記事ではウィンドウメッセージとToolStripRendererを利用したサイズグリップの強制表示を紹介します。動作確認環境は.NET 8.0ですが、…

C#&WinForms MDI子フォームのStatusStripでサイズグリップが消える。

追伸:解決方法を別の記事に記載しました。 WinFormsでMDI子フォームにStatusStripを置くとMDI親フォームの最大化時にサイズグリップが消えます。GitHub上のソースコードを調べると設計上の仕様です。具体的には次の通りです。 StatusStripはサイズグリップ…

C# WinFormsのクリップボード監視コンポーネント

WinFormsのFormへのクリップボード監視機能の追加、コンポーネントとNativeWindowで思ったより簡単に実装できました。NativeWindowの理解が浅いので問題が残っているかもしれませんが、とりあえず動きはします。動作確認はC# 12 (.NET 8.0)ですが、名前空間…

Windows11 ファイルの新規作成登録の注意点

メモ帳をアンインストールしたらファイルの新規作成からテキストファイルが消えました。修復過程で気付いた注意点を共有します。 「新規作成」項目の実体は拡張子単位のレジストリキーShellNew。HKCR直下の拡張子キーまたは拡張子キー直下のファイル型キーに…

C++&Win API _bstr_tとwil::make_bstr

Windows環境でLPWSTRからスマートポインタ的なBSTRを作成する方法には次の2通りあります。 _bstr_t(...) <comutil.h> wil::make_bstr(...) "wil/com.h" 前者の_bstr_t(...)はコンパイラ付属なので追加インストールが不要ですが、ムーブセマンティクス非対応で独自の参照</comutil.h>…

PowerShell7 URL Protocol値の設定されたProgIDを列挙する

レジストリでURL Protocol値の設定されたProgIDを列挙するコードです。Get-ItemPropertyコマンドレットは-Nameに配列を与えれば対応する複数値を取得できることを利用しています。 # 呼び出し側のスコープにHKCRを登録します。 function Register-HKCR { [Ou…

C++20&Win API ビデオキャプチャデバイスの情報を取得する

DirectShowを使ってビデオキャプチャデバイスの情報を取得するコードです。ネット上で様々な方がコードを公開しているコードをWIL対応にしたようなコードです。一部の情報はMicrosoft Docsの「キャプチャ デバイスの選択」を参考にしています。 #include <string> #d</string>…

PowerShell7 登録された拡張子のProgIDとProgIDの概要を取得する

PowerShell 7で登録された拡張子のProgIDとProgIDの概要を取得するサンプルコードです。-Pathと-LiteralPathの挙動の違い、Get-ItemPropertyによる高速化(Get-ChildItem比)等を確認するためのコードです。 #呼び出し側のスコープにHKCRを登録します。 func…