potisanのプログラミングメモ

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

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

C#9&Win API リストビューの内容をCSVへ出力する

リストビューの内容をCSVへ出力するサンプルコードです。リストビューのColumnsやItemsは特殊なコレクションクラスなのでLINQを適用できませんが、Cast<T>で対応するクラスのIEnumerable<T>へ変換すればLINQを適用できます。クラスなので参照コピーで済むと思いま</t></t>…

JavaScript 2000年以降のYYMMDD形式の文字列を日付型に変換する

2000年以降のYYMMDD形式の文字列を日付型(Date)に変換するサンプルコードです。 function dateFrom20YYMMDD(s) { if (typeof s != "string") return undefined; const m = s.match(/^(\d\d)(\d\d)(\d\d)$/) if (m == null) return undefined; const Y = pa…

JavaScript 文字列の正規表現マッチ結果をクラスで保持する

JavaScriptで文字列の正規表現のマッチ結果をクラスで保持するサンプルコードです。正規表現のマッチ結果に限らず、文字列の処理結果を保持する方法の骨組みとして使えます。 クラスで正規表現のマッチ結果だけ保持する場合 クラスで正規表現のマッチ結果を…

Python3 ディレクトリ内のファイル名をJSONへ出力する

ディレクトリ内のファイル名をJSONへ出力するサンプルコードです。pathlib、jsonを使用しています。 すべてのファイルを列挙する import json from pathlib import Path # ファイル名を取得するディレクトリのパス dir_path = Path(r"C:\Windows") # 作成す…

C# 9 システムフォルダに存在するOS DLLを取得する

C# 9 システムフォルダに存在するOS DLLを取得するサンプルコードです。バージョン情報の製品名が「Microsoft® Windows® Operating System」のDLLをOS DLLとみなしています。 using System; using System.Diagnostics; using System.IO; using System.Linq; …

C++20&Win API(Vista~) 各電源スキームのサブグループのGUID・名前・概要を列挙する

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

C++20&Win API(Vista~) 電源スキームのGUID・名前・概要を列挙する

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

C++20&Win API(Vista~) 画面の明るさを取得・設定する

Windows Vista以降で画面の明るさを取得・設定するサンプルコードです。 画面の明るさの範囲と設定値を取得する。 画面の明るさを設定する。 現在の画面プロファイルの概要・名前を取得する。 画面の明るさの範囲と設定値を取得する。 #include <iostream> #include <string> #</string></iostream>…

C++20&Win API プライマリモニターのハンドル取得&物理モニター情報の列挙

プライマリモニターのハンドルを取得して、その物理モニター情報を列挙するサンプルコードです。 #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>…

C++20&Win API ACPIテーブルIDを整数・文字列として列挙する

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

C# 9&Win API システムメニューを表示する

システムメニューを表示するサンプルコードです。 #nullable enable using System; using System.Drawing; using System.Runtime.InteropServices; using System.Windows.Forms; static class Program { [STAThread] static void Main() { Application.SetHi…

C# 9&Win API ウィンドウのクライアント領域のボタン降下でウィンドウを移動させる

ウィンドウのクライアント領域のボタン降下でウィンドウを移動させるサンプルコードです。ウィンドウはシステムに対してカーソルの位置を自身のWM_NCHITTESTメッセージで指定できることを利用します。 #nullable enable using System; using System.Drawing;…

Firefox 91.0でDuckDuckGo Privacy Essentialsがはてなブログの記事編集を妨げていた

Firefox(厳格モード、uBlock Origin導入)でCookieブロックをオフにしてもはてなブログに「サードパーティーのcookieが無効になっています」が表示されました。ブログのドメインとhttps://blog.hatena.ne.jpを例外指定して色々と弄ったところ、原因はDuckDu…

C# 9 リストビューの高速化ならItems.AddRangeも選択肢

リストビューに大量のアイテムをListView.Items.Addメソッドで追加していたら律速になっていました。仮想リストビューも一つの手ですが、項目が多い場合はListView.Items.AddRangeで高速化できる場合があります。 listView1.BeginUpdate(); // infosという配…

C++20&WinAPI プロセスの昇格タイプ(管理者権限等)を確認する

プロセスの昇格タイプを確認するサンプルコードです。カレントプロセスの昇格タイプが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>…

Python3 反復可能オブジェクトの正規表現と一致する部分を数える

Iterable(反復可能オブジェクト)の正規表現と一致する部分を数えるサンプルコードです。collections標準ライブラリのCounterクラスを使用しています。 import re from collections import Counter values = ("ab1111", "ab1112", "ac2111", "ac2112", "ad2…

Python3 反復可能オブジェクトから正規表現の一致部分が重複しない要素を1つずつ抜き出す

反復可能オブジェクト(Iterable)から正規表現の一致部分が重複しない要素を1つずつ抜き出すサンプルコードです。辞書型dictがキーと値のタプルで初期化でき、キーの重複する値を自動で上書きすることを利用しています。 import re #元から重複しないので…

C++20 MSVS 2019ではstd::span<T>のイテレーター初期化は不正な要素を参照しないように丸められる

C++

std::spanのMicrosoft Visual Studio Community 2019 Preview Version 16.11.0 Preview 3.0の現時点の最新環境における動作確認結果です。 std::span<T>をイテレーター(begin、end)で初期化するとき、参照範囲は不正な要素を参照しないように丸められます。例</t>…

C++20&WinAPI PEファイルのインポート情報を列挙する

PEファイル(Windowsの主なEXE、DLLファイル)のインポート情報を列挙するクラスのコードです。std::spanを多用していますが、所々に不正なメモリを読み込むバグの余地は残っていると思います。正常なPEファイルを確認する分には特に問題ありません。 修正履…

C++20&Win32 API スレッドまたはプロセストークンのユーザー情報SIDの文字列表記・ユーザー名・参照ドメイン名を取得する

スレッドまたはプロセスのトークンのユーザー情報SIDから文字列表記・ユーザー名・参照ドメイン名を取得するコードです。Win32 API関数のラッパー関数・クラスを定義していますが、サンプルコードなので名前空間で囲ったりはしていません。 #include <bit> #inclu</bit>…

C# 9 Unicode範囲の名前と長さを列挙する

C#

.NET 5ではSystem.Text.Unicode名前空間にUnicodeRangeクラス、UnicodeRangesクラスがあります。UnicodeRangeクラスはUnicode範囲の開始コードポイントと長さ、UnicodeRangesクラスは静的プロパティとして名前付きのUnicodeRangeクラスを多数公開しています…

C++&Win32 API ICU4Cでユニコードを扱う

Windows 10 バージョン 1903以降、最新のSDKではicu.h、icu.lib、icu.dllからICU4Cを使用できます。ICU4Cを使えばUnicode関係の詳細な処理が可能です。ここでは動作確認用のコードを公開します。 参考 この投稿を書く際に参照したページです。 International…

C#&VS2019 C#プロジェクトが開けなくなったとき

できごと:いつの間にかVisual Studio 2019 PreviewでC#プロジェクトが作れるのに開けなくなった。dotnetコマンドでもSDKやランタイムが表示されなかった。 解決方法:Program Files\dotnetフォルダとProgram Files\dotnet\sdksの存在を確認した後、Program …

R&tidyverse magrittrによるextract関数の上書きに注意

tidyverseパッケージの後でmagrittrパッケージを読み込むとextract関数が上書きされます。magrittr::extract関数の仕様により、magrittrなしのつもりで呼び出してもエラーを発生しないのでかなり気づきにくいバグが生まれます。conflictedパッケージを使うか…

R&tidyverse tibbleの行を整数範囲で伸ばす

R

tidyverseのtibbleの行を整数範囲で伸ばす方法です。seq関数で作成した適当な整数範囲をtibbleにして、full_join関数で結合することで行を伸ばしています。full_joinの左側に整数範囲のtibbleを指定すれば順番が指定されるので、ついでに昇順並び替えと欠損…

C++20&WinAPI PEファイルのバージョン情報を取得する

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

R&tidyverse ベクトルから開始位置をずらした2つの等長ベクトルを作成して関数を呼び出す

R

ベクトルから開始位置をずらした等長のベクトルを作成して関数を呼び出すコードです。dplyr (tidyverse)を使用しています。 require(dplyr) # ベクトルのstart個めとそこからdiff個ずらした2個の配列のデータフレームを返します。 vec_shifted_tibble <- fun…

R 引数の既定値(省略時の値)を操作する

R

本文 formula()で引数の既定値(省略時の値)を取得・設定できます。 # リスト形式で取得される。 str(formals(paste)) # Dotted pair list of 4 # $ ... : symbol # $ sep : chr " " # $ collapse: NULL # $ recycle0: logi FALSE # <-で代入すると設定でき…

C++&WinAPI CLSID_QuickLinksに対するIDeskBand::GetBandInfoが必ず失敗する

以下のコードの(☆)が不正なメモリアクセス(アドレス0の操作)で確実に失敗します。原因は不明です。 先に実行しているIDeskBand::GetWindowはE_FAILを返すので、こちらで判別は可能かもしれません。 #define STRICT #define NOMINMAX #define WIN32_LEAN_AN…

Windows&Sysinternals コマンドプロンプトでshell32.dllの文字列を抜き出す

実行に必要なstrings64 (Sysinternals)はMicrosoftからダウンロードできます。 7文字以上のANSI/Unicode文字列を抜き出す。 SET STRINGS64_PATH="<string64のインストールディレクトリ>\strings64" %STRINGS64_PATH% -a -u -nobanner %windir%\system32\shell32.dll | findstr ".......*"</string64のインストールディレクトリ>