potisanのプログラミングメモ

趣味のプログラマーがプログラミング関係で気になったことや調べたことをいつでも忘れられるようにメモするブログです。はてなブログ無料版なので記事の上の方はたぶん広告です。記事中にも広告挿入されるみたいです。

2021-01-01から1年間の記事一覧

JavaScript 短いサンプルコード

オブジェクトを他のオブジェクトの一部にする オブジェクト配列から要素のキーセットを取得する globalThisのアルファベット小文字からはじまるプロパティの名前を一覧取得する globalThisのアルファベット大文字からはじまるプロパティの名前を一覧取得する…

JavaScript オブジェクトのプロパティ記述子を取得する

// オブジェクトのプロパティ記述子配列を取得します。 const GetObjectOwnPropertyDescArray = object => Object.entries(Object.getOwnPropertyDescriptors(window)) // プロパティ記述子配列からデータ記述子を抜き出します。 const FilterOwnPropertyDes…

C++20 標準ライブラリでUTF-16とUTF-32を変換する関数

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…

JavaScript 配列様オブジェクトかプロパティから判定する

Array.from()はlengthプロパティが正の整数とみなせるオブジェクトを配列様オブジェクト(Array-like object、配列のようなオブジェクト)と判断していると考えられます。 真の配列様オブジェクトかの判断は反復可能オブジェクト以外を与えてArray.from()の…

JavaScript 配列様オブジェクトの作成とArray.from()での利用

配列様オブジェクト(Array-like object) 配列様オブジェクトのArray.from()での利用 配列様オブジェクト(Array-like object) MDNのArray.from()の説明には「Array-like object」(「配列様オブジェクト」)あるいは「配列のようなオブジェクト」という表…

JavaScript 文字列をUTF-16コードユニットの配列へ変換する

以下のコードで文字列をUTF-16コードユニットの配列に変換できます。 Array.from("", s => Array.from({length: s.length}, (_, i) => s.charCodeAt(i))) // Array(3) [ [ 55356, 57166 ], [ 55356, 57162 ], [ 55357, 56833 ] ] Array.from("", s => Array.…

JavaScript 文字列をUnicodeコードポイントへ変換する

本文 以下のコードで文字列をUnicodeコードポイントの配列に変換できます。 Array.from("", s => s.codePointAt(0)); // Array(3) [ 127822, 127818, 128513 ] 関数にしておくと便利かもしれません。 const getCodePointsFromString = (source) => { if (typ…

C# 9 バイト配列からメモリ上の読み枠を広げた整数配列を作成する

C#

#nullable enable using System; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; [MethodImpl(MethodImplOptions.AggressiveInlining)] static uint[] CreateUInt32ArrayRough(ReadOnlySpan<byte> value) => MemoryMarshal.Cast<byte, uint>(v</byte,></byte>…

C++ Windows環境で絵文字のstd::iswgraphがfalseな理由の考察

VC++ではワイド文字列(L"...")に絵文字を含めることができます。この文字列に対してstd::iswgraphを適用しても戻り値はfalseです。 #include <string> #include <cwctype> #include <iostream> #include <iomanip> int main() { const std::wstring s{ L"" }; for (auto i = s.cbegin(); i != s</iomanip></iostream></cwctype></string>…

C++ UTF-16サロゲートペア判定とUTF-16/UTF-32文字列の相互変換

UTF-16サロゲートペア判定とUTF-16/UTF-32文字列の相互変換コードです。Unicodeの仕様はネット上の解説ページを参照しているため、間違えてる可能性もあります。 #include <algorithm> #include <string> namespace u16_surrogatepair { const char16_t high_surrogate_first =</string></algorithm>…

C# 9.0&Win32 API レジストリからプロパティシステムの拡張子情報を取得する

レジストリからプロパティシステムの拡張子情報を取得するサンプルコードです。情報源はMicrosoftの公式ドキュメントです。 ドキュメントの記載に従い、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\PropertySystem\PropertyHandlersに登…

C# 9&Win API カレントユーザーのレジストリに登録された実行ファイルのAppIDを取得する

カレントユーザーのレジストリに登録された実行ファイルのAppIDを取得するサンプルです。HKEY_CLASSES_ROOT\AppIDレジストリキーのうち、キー名が{GUID}形式ではないキーを扱います。AppIDレジストリキーの詳細はMicrosoft Docsを参照ください。 // 必要なNu…

C++&Win API 設定(Windows設定アプリ)を表示する

設定(Windows設定アプリ)を表示する ms-settings URIスキーマとShellExecute/ShellExecuteEx関数を使用して設定(Windows設定アプリ)を表示できます。 設定のトップを表示するには次のようにします。 ShellExecute版 #define STRICT #include <Windows.h> int main()</windows.h>…

C++&Win32 API プロパティシステムに登録されたプロパティの正規名と取り得る値を列挙する

Windowsのプロパティシステムに登録されたプロパティの正規名(Canonical Name)と取り得る値(Possible Value)を列挙するサンプルです。PSGetPropertySystemでIPropertySystemを取得した後、IPropertyDescriptionList→IPropertyDescription→IPropertyEnumT…

C++ Windows環境のMSVCで標準出力に日本語とASCII以外の文字を出力する

Windows環境で標準出力に(std::wcoutが認識する)日本語とASCII以外の文字を出力するには_setmode(_fileno(stdout), _O_U16TEXT);を呼び出します。この呼び出しの後、標準ライブラリはユニコードモードになるそうです。 #include <iostream> #include <io.h> #include <fcntl.h> int </fcntl.h></io.h></iostream>…

C# Spy++とメッセージを監視するアプリケーションの対象プラットフォームは揃える

Spy++でアプリケーションのメッセージを監視する場合はそれらの対象プラットフォームを揃える必要があります。対象プラットフォームが異なる場合、Spy++はメッセージを監視できません。詳細はIntroducing Spy++ - Visual Studio | Microsoft Docsを参照して…

C#&Win32 API ソートマークやスプリットボタンに対応したリストビューコントロール(ListViewEx)

リストビュー(ListView)から派生してソートマークやスプリットボタン(ドロップダウン用)に対応したリストビューコントロールのコードです。 Program.cs ListViewEx.cs 関連記事 Program.cs using System; using System.Drawing; using System.Windows.Fo…

C#&Win32 API Win32 APIのRECT構造体と.NET 5.0のRectangle構造体は互換性がない

Win32 APIのRECT構造体と.NET 5.0のRectangle構造体は互換性がありません。C#でRECTを使う場合、一度RECTとして取得してからRectangleへ変換する必要があります。 C#のRECT構造体ラッパー // [StructLayout(LayoutKind.Sequential)] struct RECT { public in…

C#10&Win32 API リストビューのヘッダーにソートマークやドロップダウン(スプリットボタン)を表示する

概要 Program.cs ListViewHeaderUtility.cs 概要 標準コントロールのリストビューはWin32 APIのリストビュー(コモンコントロール)を元に作成されています。したがって、ListView.Handleを使えばWin32 APIのリストビューと同様の手順でソートマークやスプリ…

C++&Win32 API MMDevice API (Core Audio APIs)によるデバイス情報の取得

トップ/C++言語関係 Windows Vistaから導入されたMMDevice API(Core Audio APIs)を使用してデバイス情報を取得するサンプルです。WIL(NuGetのMicrosoft.Windows.ImplementationLibraryパッケージ)を使用した場合はコードにバージョンを記載しています。…

C++20&Win32 API フォントの名前を列挙する

C++20とWin32 APIでフォントの名前を列挙するコードです。 フォント情報の列挙にはEnumFontFamiliesExW関数を使用します。これはHDCとLOGFONTW構造体等を引数とするコールバック関数を受け取ります。HDCに使用するスクリーンのHDCはGetDC関数で取得してRelea…

C++ std::multimap

標準ライブラリのSTLコンテナ、キーの重複を許すマップstd::multimap(以下multimap)についてのメモです。 初期化子リストによる初期化 要素数やキーに対応した値の個数の取得 要素の追加 あるキーを持つ要素の列挙 あるキーを持つ要素をまとめて削除 その…

C++17&Win32 API デバイス情報要素の文字列プロパティ(概要、クラス、クラスGUID、フレンドリーネーム、ハードウェアID)を列挙・整理する

デバイス情報要素の文字列プロパティ(概要、クラス、クラスGUID、フレンドリーネーム、ハードウェアID)を列挙するコードです。再利用可能なコードをUtility.hppへ移動しています。 文字列プロパティ(概要、クラス、クラスGUID、フレンドリーネーム、ハー…

C++17&Win32 API デバイス情報要素のGUID、不透明ハンドル、概要を列挙する

デバイス情報要素のGUID、不透明ハンドル(Opaque Handle)、概要を列挙するサンプルコードです。C++&Win32 API デバイス情報要素のGUIDと不透明ハンドルを列挙するの拡張です。 #include <array> #include <memory> #include <string> #include <numeric> #include <iostream> #include <tuple> #include <list> #pr</list></tuple></iostream></numeric></string></memory></array>…

C++&Win32 API デバイス情報要素のGUIDと不透明ハンドルを列挙する

Windows NT系列でデバイス情報要素のGUIDと不透明ハンドル(Opaque Handle)を列挙するサンプルコードです。 SP_DEVINFO_DATA構造体として取得する 最も単純な方法としてSP_DEVINFO_DATA構造体のまま取得するサンプルコードです。追記:一部のSetup API(Set…

情報量の単位KBの変遷とkB、KiB

Windowsではファイルサイズの単位として「KB」をよく見ます。「1 KB = 1024バイト = 210バイト」と思っていましたが、いつからか「1 KB = 1000バイト = 103バイト」という扱いが増えました。 SI接頭辞としては「k = 103」なので後者が正しく見えますが、この…

C++11 整数→整数の2進接頭辞バイト単位リテラルの定義

C++

C++11から導入されたユーザー定義リテラル(cpprefjp)を使用すると2進接頭辞バイト単位リテラル(KiB等)を定義できます。 1KiBを1024に変換するような整数型への変換は次のように書けます。 constexpr unsigned long long operator""KiB(unsigned long lon…

C++20 Win32 APIでウィンドウにHLSグラデーションを描画する

Win32 APIでウィンドウにHLS色空間のグラデーションを描画するコードです。"win32_hls_color.hpp"ヘッダーファイルのwin32_hls_colorクラスは以前の投稿のコードを使用しています。 右側の画像の一番上に黒い横線がクラス設計か画像処理の問題かは悩んでいま…

C++20 Win32 APIを使用したHLS色空間クラス

Win32 API、具体的にはShell lightweight utility functions(Microsoft Docs)のColorHLSToRGB関数、ColotRGBToHLS関数を使用したHLS色空間クラスです。 std::clampを使っているので動作環境をC++20としていますが、適当に書き換えればC++17以前にも対応で…

C++20 Win32 APIでウィンドウにDIBセクションを描画する

Win32 APIでウィンドウを表示して、CreateDIBSection関数で作成したビットマップを描画するサンプルコードです。 CreateDIBSection関数で作成したビットマップはppvBits引数に与えた変数の内容をビットマップデータとして直接操作できます。ここでは赤と黒の…