C++
ファイルにUTF-16文字列(std::wstring_viewが対応するデータ)を出力するにはstd::ofstreamをバイナリモードで使用します。次のようなコードを準備しておくと便利だと思います。 #include <fstream> #include <filesystem> // UTF-16文字列を指定されたパスへ出力します。BOMは付</filesystem></fstream>…
Windows Vistaからはマスター音量(システム全体の音量)の変更にCOMベースのMMDevice API (Windows Multimedia Device API)を用います。ここではスピーカー(既定のマルチメディア出力)の音量情報を取得するコードを記載します。 #include <format> #define STRICT</format>…
Windows Vistaからはマスター音量(システム全体の音量)の変更にCOMベースのMMDevice API (Windows Multimedia Device API)が用いらます。ここではスピーカー(既定のマルチメディア出力)の表示名を取得するコードを記載します。 #define STRICT #define N…
Windows Vistaからはマスター音量(システム全体の音量)の変更にCOMベースのMMDevice API (Windows Multimedia Device API)が用いらます。ここではミュートを切り替えるコードを記載します。 #define STRICT #define NOMINMAX #include <Windows.h> #include <mmdeviceapi.h> #include <endpointvolume.h></endpointvolume.h></mmdeviceapi.h></windows.h>…
デバイス情報要素の文字列プロパティ(概要、クラス、クラスGUID、フレンドリーネーム、ハードウェアID)を列挙するコードです。再利用可能なコードをUtility.hppへ移動しています。 文字列プロパティ(概要、クラス、クラスGUID、フレンドリーネーム、ハー…
Setup APIでシステムに存在するデバイスのクラス・インターフェイスのクラスと説明を列挙するコードです。 単純に列挙する #pragma comment(lib, "SetupAPI.lib") #include <bit> #include <format> #include <string> #define STRICT #include <Windows.h> #include <SetupAPI.h> #include <InitGUID.h> #include <devpkey.h> //</devpkey.h></initguid.h></setupapi.h></windows.h></string></format></bit>…
デバイス情報要素のGUID、不透明ハンドル(Opaque Handle)、概要を列挙するサンプルコードです。 #include <memory> #include <string> #include <format> #include <numeric> #include <iostream> #include <list> #pragma comment(lib, "SetupAPI.lib") #define STRICT #define NOMINMAX #include <Windows.h> #include <SetupAPI.h></setupapi.h></windows.h></list></iostream></numeric></format></string></memory>…
エクスプローラーやブラウザからドロップされたデータのデータ形式を列挙するサンプルコードです。Windowsプロジェクトでのウィンドウクラスの登録、ウィンドウの表示、複数行テキストボックスだけ持つウィンドウの実装、IUnknownクラスの実装サンプルとして…
ドロップされたOLEデータオブジェクトに含まれるShellItem(ファイル、フォルダ、特殊フォルダ等)を列挙するサンプルコードです。 #define STRICT #include <Windows.h> #include <ShlObj.h> #include <ShObjIdl.h> #include <bit> #include <format> #include <string> #include <vector> auto MY_WINDOW_CLASS_NAME{ L"Pr</vector></string></format></bit></shobjidl.h></shlobj.h></windows.h>…
概要 32ビット形式のPEファイルを生データとして解析してIMAGE_COR20_HEADER構造体を取得するサンプルコードのC++20版です。実際にはIMAGE_COR20_HEADER構造体のメインであろうメタデータは今後の拡張に備えてフォーマット非公開なのでCLSID_CorMetaDataDisp…
ファイルセキュリティ記述子→DACL→ACEと取得してセキュリティユーザーの名前を列挙するサンプルです。 #include <bit> #include <string> #include <span> #include <memory> #include <vector> #define STRICT #define NOMINMAX #include <Windows.h> #include <AclAPI.h> // ファイルのセキュリティ情報をバイト配列</aclapi.h></windows.h></vector></memory></span></string></bit>…
一部のC APIにC++ラッパーを作成しています。 #include <string> #include <vector> #define STRICT #define NOMINMAX #include <Windows.h> // ファイルのセキュリティ情報をバイト配列として返します。 std::vector<BYTE> GetFileSecurityW(std::wstring_view Path, SECURITY_INFORMATION Re</byte></windows.h></vector></string>…
#include <array> #include <string> #include <vector> template <std::ranges::range T> requires std::negation_v<std::ranges::sized_range<T>>&& std::same_as<std::ranges::range_value_t<T>, std::wstring> std::wstring join(const T& range, std::wstring_view sep) { size_t buffer_size{ 0 }; size_t count{ 0 }…</std::ranges::range_value_t<t></std::ranges::sized_range<t></std::ranges::range></vector></string></array>
共用のコード #pragma once #include <string> #include <format> #include <vector> std::vector<BYTE> GetTokenInformationInByteArray( HANDLE TokenHandle, TOKEN_INFORMATION_CLASS TokenInformationClass) { DWORD required; if (!::GetTokenInformation(TokenHandle, TOKEN_INFORMAT</byte></vector></format></string>…
#include <string> #include <iostream> #define STRICT #define NOMINMAX #include <Windows.h> #include <subauth.h> #include <ntlsa.h> #include <sddl.h> #include <wil/resource.h> #define THROW_IF_LSA_NTSTATUS_FAILED(status) THROW_IF_NTSTATUS_FAILED(::LsaNtStatusToWinError((status))) // LSA_UNICODE_STRIN…</wil/resource.h></sddl.h></ntlsa.h></subauth.h></windows.h></iostream></string>
WindowsでIPv4アドレスを列挙するサンプルコードです。 GetIpAddrTable関数はメモリに構造体とそこから参照される文字列をまとめて配置します。このコードではそれらをまとめて管理するためにクラスを使用しています。なお、この関数はループバックアドレス…
constexprはreinterpret_castを含めません。C++20からはより厳密かつconstexprに対応したstd::bit_castが提供されています。reinterpret_castをポインタの型変換に使う場合はこちらを使う方が良さそうです。 bit_cast - cpprefjp ポインタ同士のキャストには…
#include <format> #include <iostream> #include <string> #include <vector> #include <optional> #define STRICT #include <Windows.h> #include <powrprof.h> #pragma comment(lib, "powrprof.lib") namespace PowerUtil { std::vector<GUID> GetPowerSchemeGUIDs() { std::vector<GUID> guids; for (ULONG i = 0; ; ++…</guid></guid></powrprof.h></windows.h></optional></vector></string></iostream></format>
#include <iostream> #include <string> #include <vector> #include <optional> #define STRICT #include <Windows.h> #include <powrprof.h> #pragma comment(lib, "powrprof.lib") namespace PowerUtil { std::vector<GUID> GetPowerSchemeGUIDs() { std::vector<GUID> guids; for (ULONG i = 0; ; ++i) { GUID guid; DW…</guid></guid></powrprof.h></windows.h></optional></vector></string></iostream>
Windows Vista以降で画面の明るさを取得・設定するサンプルコードです。 画面の明るさの範囲と設定値を取得する。 画面の明るさを設定する。 現在の画面プロファイルの概要・名前を取得する。 画面の明るさの範囲と設定値を取得する。 #include <iostream> #include <string> #</string></iostream>…
プライマリモニターのハンドルを取得して、その物理モニター情報を列挙するサンプルコードです。 #include <format> #include <iostream> #include <string_view> #include <span> #include <vector> #define STRICT #include <Windows.h> #include <physicalmonitorenumerationapi.h> #pragma comment(lib, "dxva2.lib") inline HMONITOR GetPrimaryMon</physicalmonitorenumerationapi.h></windows.h></vector></span></string_view></iostream></format>…
ACPIテーブルIDを整数・文字列として列挙する。 #include <format> #include <iostream> #include <vector> #define STRICT #define NOMINMAX #include <Windows.h> namespace SysInfoUtil { std::vector<DWORD> EnumSystemACPITableIDs() noexcept { auto buffer_size = ::EnumSystemFirmwareTables('ACP</dword></windows.h></vector></iostream></format>…
プロセスの昇格タイプを確認するサンプルコードです。カレントプロセスの昇格タイプがTOKEN_ELEVATION_TYPE::TokenElevationTypeFullか確かめることで管理者権限を確認できます。 #include <optional> #define STRICT #define NOMINMAX #include <Windows.h> std::optional<TOKEN_ELEVATION_TYPE> GetPro</token_elevation_type></windows.h></optional>…
std::spanのMicrosoft Visual Studio Community 2019 Preview Version 16.11.0 Preview 3.0の現時点の最新環境における動作確認結果です。 std::span<T>をイテレーター(begin、end)で初期化するとき、参照範囲は不正な要素を参照しないように丸められます。例</t>…
PEファイル(Windowsの主なEXE、DLLファイル)のインポート情報を列挙するクラスのコードです。std::spanを多用していますが、所々に不正なメモリを読み込むバグの余地は残っていると思います。正常なPEファイルを確認する分には特に問題ありません。 修正履…
スレッドまたはプロセスのトークンのユーザー情報SIDから文字列表記・ユーザー名・参照ドメイン名を取得するコードです。Win32 API関数のラッパー関数・クラスを定義していますが、サンプルコードなので名前空間で囲ったりはしていません。 #include <bit> #inclu</bit>…
Windows 10 バージョン 1903以降、最新のSDKではicu.h、icu.lib、icu.dllからICU4Cを使用できます。ICU4Cを使えばUnicode関係の詳細な処理が可能です。ここでは動作確認用のコードを公開します。 参考 この投稿を書く際に参照したページです。 International…
Ver系関数を使ってPEファイルのバージョン情報を取得するサンプルコードです。ひっそりとstd::format(実質fmt)を使用しています。 #include <format> #include <string> #include <span> #include <unordered_map> #include <vector> #define STRICT #define NOMINMAX #include <Windows.h> #pragma comment(lib, "v</windows.h></vector></unordered_map></span></string></format>…
以下のコードの(☆)が不正なメモリアクセス(アドレス0の操作)で確実に失敗します。原因は不明です。 先に実行しているIDeskBand::GetWindowはE_FAILを返すので、こちらで判別は可能かもしれません。 #define STRICT #define NOMINMAX #define WIN32_LEAN_AN…
C++標準ライブラリを使用してUTF-16とUTF-32を相互変換する関数のコードです。コンセプトにより制約するため、C++20以降用です。 u16_surrogate.hpp u16s_u32s.hpp テストコード u16_surrogate.hpp #pragma once namespace u16_surrogate { const char16_t h…