potisanのプログラミングメモ

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

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

ShellFolderキーを持つCLSIDキーエントリの一覧

Windows 10環境のOLEScriptキーを持つCLSIDキーエントリの一覧です。一部Office関係等は除外しています。 CLSID 表示名 InProcServer32 {00020D75-0000-0000-C000-000000000046} {0DF44EAA-FF21-4412-828E-260A8728E7F1} Taskbar {38A98528-6CBF-4CA9-8DC0-B…

OLEScriptキーを持つCLSIDキーエントリの一覧

Windows 10環境のOLEScriptキーを持つCLSIDキーエントリの一覧です。 CLSID 表示名 ProgID InProcServer32 {cc5bbec3-db4a-4bed-828d-08d78ee3e1ed} JScript Compact Profile (ECMA 327) JScript.Compact %WINDIR%\System32\jscript.dll {16d51579-a30b-4c8b…

HKEY_CLASSES_ROOTに登録されたCLSIDのサブキー一覧

かなり古いPCでHKEY_CLASSES_ROOTに登録されたCLSIDのサブキーの一覧です。出現回数が5回未満のサブキーは除外しています。 回数 サブキー 5000回以上 InprocServer32 5000回未満100回以上 ProgID、VersionIndependentProgID、TypeLib、Version、Implemented…

C# Dictionaryでキーの大文字小文字を同一視する

C#

本文 Dictionaryクラスはコンストラクタの引数に次のいずれかを与えることでキーの大文字小文字の区別を指定できます。区別の方法は与えた変数により異なります(リファレンス参照)。 StringComparer.OrdinalIgnoreCase StringComparer.InvariantCultureIgn…

SourceBrowser:.NET Framework、Roslyn、.NET Core、Azure

C#

対象 URL 備考 .NET Framework https://referencesource.microsoft.com/ .NET Frameworkは.NET Coreに統合された。 Roslyn http://sourceroslyn.io/ .NET Core https://source.dot.net/ Azure http://sourcebrowser.azurewebsites.net/ SourceBrowser - GitH…

C# PEファイルのMS-DOSヘッダとNTヘッダのシグネチャをメモリマップトファイルで読み込む

C#

PEファイルのMS-DOSヘッダ(IMAGE_DOS_HEADER)とNTヘッダ(IMAGE_NT_HEADERS)のシグネチャをメモリマップトファイルで読み込むサンプルコードです。IMAGE_DOS_HEADERは固定長配列を含むため、マーシャリングとGCHandleを利用しています。IMAGE_NT_HEADERS…

C# DOS MZファイルヘッダー(IMAGE_DOS_HEADER)のe_lfanewの幅広さ

Windows 10の実行ファイルはイメージファイルの一種であり、普通はPEファイルフォーマットを持ちます。PEファイルフォーマットではファイルの先頭にMS-DOSと共通のMZファイルヘッダー(IMAGE_DOS_HEADER構造体)、続けてMS-DOS Real Modeスタブプログラムを…

C# Enumerable.ToLookup(LINQ)で配列やリスト(IEnumerable)を条件ごとに分ける

C#

C#ではEnumerable.ToLookup(LINQ)を使うことで配列やリスト(IEnumerable)を条件ごとに分類できます。ToDictionaryと組み合わせることで辞書も作成できます。 模式図: Enumerable.ToLookup:■□■□○ → ■■、□□、○ ■□○:分類された要素(キーセレクタが同じ…

C# Windows 10のレジストリに登録されたAppID情報を取得するクラス

動作確認環境:C# 8(.NET Core 3.1)、9(.NET 5.0) レジストリからHKEY_CLASSES_ROOT\AppIDキーの情報を取得する。 C#でWindows 10のレジストリに登録されたAppID情報を取得するクラスです。レジストリから値の取得は実装していますが、取得した値の整形…

C# Windows 10のレジストリを直接参照して実行ファイル名の登録されたAppIDとその名前を取得するコード

動作確認環境:Windows 10、C#、.NET Core 3.1 レジストリを直接参照して実行ファイル名の登録されたAppIDとその名前を取得するコードです。 using System; using System.Collections.Generic; using Microsoft.Win32; class Program { static void Main() {…

C# Windows 10のレジストリを直接参照して登録アプリケーションのSupportedTypesを取得するコード

動作確認環境:Windows 10、C#、.NET Core 3.1 レジストリを直接参照して登録アプリケーションのSupportedTypesを取得するコードです。shlwapi.dllのIQueryAssociationsは列挙に非対応なので、一覧を取得する場合はこのように直接取得するしかないかもしれま…

C# Windows 10のレジストリキーハンドル情報を取得するコードとクラス

C#でWindows 10のレジストリキーハンドルの情報を取得するには非公開のWin32 API NtQueryKeyが使用できます。NtQueryKey関数に渡す構造体は可変長配列を含みますが、バイト配列で受け取ってSystem.BitConverter、System.TextEncoding.Unicode.GetStringを使…

C# Windows 10の拡張子の関連付け情報を文字列で取得するコードとクラス

Windows 10ではレジストリに記録される拡張子の関連付け情報が複雑で、レジストリを直接操作すると互換性が失われる可能性があります。shlwapi.dllの公開するAssocQueryStringW関数の使用でこの複雑さや互換性を解決できます。 なお、AssocQueryStringAでAns…

C# Windowsの拡張子の関連付けレジストリキーのハンドルと名前を取得するコード

Windows 10でレジストリから拡張子の関連付けキーのハンドルとその名前を取得するコードです。拡張子の関連付け情報を持つキーハンドルはWin32 APIのAssocQueryKeyW関数で取得できますが、.NET Core 3.1の標準機能ではレジストリキーハンドル(HKEY)の名前…

C#&Win API レジストリキーハンドルからキー名を取得する

動作確認環境:C# 8.0(.NET Core 3.1)、9.0(.NET 5.0) C#ではWin32 APIで取得したレジストリキーハンドルHKEYからMicrosoft.Win32.RegistryKeyを作成するとキーの名前(Nameプロパティ)が空の文字列""になります。ZwQueryKey関数に準ずるNtQueryKey関数…

Windows 10でPowerShell 7が実行後に消えないようにする

初期設定だとPowerShell 7はスクリプトの実行後に消えますが、レジストリを以下の通り書き換えると実行後も消えません。@は既定値です。 [HKEY_CLASSES_ROOT\Applications\pwsh.exe\shell\open\command] @="C:\Program Files\PowerShell\7\pwsh.exe" -NoExit…

Windows 10の拡張子の関連付けとレジストリ(FileExtsキー)

概要 Windows 10で拡張子の関連付け情報を得るにはHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExtsキーを確認する必要があります。それぞれ登録される情報は異なりますが、重複する場合はFileExtsキーの情報が優先されます…

PowerShell 7 自動変数一覧

PowerShell 7の自動変数一覧です。各自動変数の詳細はMicrosoftの公式ドキュメントを参照ください。 ドキュメント順(アルファベット順) 概要(名前、型、説明) 付録 実行環境の確認(Windows環境) 真偽 実行環境 $MyInvocation $switch CSVデータ ドキュ…

PowerShell 7 短いCMI(WMI v2)サンプルコード集

PowerShell 7でCMI(WMI v2)を使う短いサンプルコード集です。 WindowsのOS情報を取得する WindowsのOS情報から個別情報を取得する WindowsのBIOS情報を取得する USBコントローラーデバイス一覧を取得する マウスやトラックパッドなどのポインティングデバ…

PowerShell Get-WmiObjectとGet-CimInstance(WMIコマンドレットとCMIコマンドレット)

2021/3/10:この記事は別のブログで投稿した記事を移動したものです。 概要 Get-WmiObjectはWMI v1 コマンドレットであり、PowerShell Core以降は削除されている。 Get-CimInstanceはCMI(WMI v2)コマンドレットであり、PowerShell Core以降から提供されて…

JavaScript 文字列とサロゲートペアの注意

2021/3/10:この記事は別のブログで投稿した記事を移動したものです。 まえがき 間違ったコードと注意点 正しいコード 備考:文字列のlengthとArray.from関数 まえがき JavaScriptの文字列はUTF-16なのでサロゲートペアを含みます(少なくとも2019年12月6日…

Python 3.8 基本的なデコレータサンプル集

2021/3/10:この記事は別のブログで投稿した記事を移動したものです。 Python 3.8用の基本的なデコレータのサンプル集です。デコレータのテスト用に作成したコード一覧でもあります。 関数をそのまま呼び出すデコレータ 関数の引数をある定数のみにするデコ…

Python 3.8 デコレータ(decorator)の基本的な動作

2021/3/10:この記事は別のブログで投稿した記事を移動したものです。 Python 3.8にはデコレータと呼ばれる機能があります。代表的なものは@staticmethodや@classmethodであり、@名前として関数やクラスの前に付けて使われます。 このデコレータ、実態は関数…

PowerShell 7 基本的な配列作成方法の比較

#2要素以上はa, b, ... 1, 2, 3 #1要素は,a ,0 #0要素以上は@( ) @() @(1) @(1, 2, 3) #範囲はa..b 2..5 PowerShell 7ではa, b, c形式で配列が作成できますが、この方法では0要素、1要素の配列が作成できません。これを解決するために1要素には,x、0要素以上…

PowerShell 7 小物類

PowerShell7の短いコードや覚書です。 有用なページ PowerShell Gallery - Microsoft DevBlogs PowerShell - Microsoft Scripting Blog - Microsoft 文字列配列からURLとして不正な要素を除外する Add-Type -Assembly System.Web $values1 = "あいうえお", "…

PowerShell 7 演算子一覧

演算子の一覧 一般演算子 特殊演算子 各演算子の用法 -matchの用例 参考 以下では特殊演算子以外を一般演算子として表記しています。和訳も便宜上のものです。適切な名前があればご指摘いただけると嬉しいです。 演算子の一覧 一般演算子 分類 演算子 算術演…

PowerShell 7 クリップボードの文字列から特定フォルダ以下のフォルダを開く

メイン PowerShell 7でクリップボードの文字列から特定フォルダ以下のフォルダを開くソースコードです。 $basePath = <特定フォルダの絶対・相対パス> $paths = (Get-Clipboard) -split "`r`n" foreach ($path in $paths) { $fullpath = Join-Path $basePath…

C# 8 HTMLのスクリプト要素の一部をJSONとして抜き出す

C#

2021/3/10:この記事は別のブログで投稿した記事を移動したものです。 C# 8.0でHTMLのスクリプト要素の一部をJSONとして抜き出す方法の覚書です。この投稿ではSystem.Text.Json.JsonDocumentクラスを用いて不定形のJSONを扱います。スクリプト要素の一部がJS…

PowerShell 7 文字列配列の各要素を小文字化&置換

2021/3/10:この記事は別のブログで投稿した記事を移動したものです。 PowerShell 7で文字列配列の各要素を小文字化、置換するサンプルコードです。 test.ps1 #文字列を改行`r`nで分割して文字列配列を作成 $modelNames = "abc`r`nde f`r`n g hi" -split "`r…

C# 8-9 MemoryStreamとStreamWriterを組み合わせるときの注意点と対処

C#

C#でMemoryStreamとStreamWriterを組み合わせて使ったら遭遇した想定外の仕様を注意点と対処として記録します。 StreamWriterはFlushを呼び出すまでMemoryStreamへ書き込まれない 失敗するコード using var、トップレベルステートメント(C# 9.0) using {..…