potisanのプログラミングメモ

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

Windows

URL Protocol値を持つProgIDキーエントリの一覧抜粋

Windows 10環境でURL Protocol値を持つProgIDキーエントリの一覧抜粋と列挙用のコードです。意外と多くのProgIDが登録されていました。 iTunes関係は多いので削除しています。Acrobat、Office、Kindle、xbox(プリインストール)、Skype、OneDrive、GitHub、…

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

Windowsではシェルに「shell:~」形式の名前を与えると特殊フォルダを開けます。C#でこの形式からパスを取得するには、一度Win32 APIのParseDisplayName関数でアイテムIDリストを取得して、取得したアイテムIDリストをWin32 APIのSHGetPathFromIDListEx関数…

C# Known Folderの表示名と型名を取得する(SHGetFileInfo版)

C# 9(トップレベルステートメント) Main関数(C# 8) 動作確認環境:C# 8.0(.NET Core 3.1)、C# 9.0(.NET 5.0) SHGetKnownFolderIDList→アイテムIDリスト→SHGetFileInfoW→表示名・型名 Win32 APIのSHGetKnownFolderIDListとSHGetFileInfoWを使用してKn…

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# DOS MZファイルヘッダー(IMAGE_DOS_HEADER)のe_lfanewの幅広さ

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

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 短い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以降から提供されて…

Python 3.4 Windowsクリップボード操作クラス

Python 3.4からAPIをがしがし呼び出してWindowsのクリップボードを操作するクラスです。tkinterを使った書き込みが出来なかったので勉強がてら作ってみました。ウィンドウ関係の関数は敢えて外してあります。 大雑把な更新履歴 ソースコード サンプルコード …

Win32 API NTSTATUSの覚書

Win32 APIの一部関数で実行結果を表す戻り値の型に使われるNTSTATUS型の覚書です。 C++ C++で使用する場合の情報です。 定義 ntstatus.hで32ビット符号付き整数(int)のエイリアスとして定義されます1。Win32 Errorのint型、HRESULTもintなので相互に代入可…

Windows デバイスコンテキスト4種類の概要メモ

2021/3/10:この記事は別のブログで投稿した記事を移動したものです。 概要 Microsoft DocsによるとWindowsのデバイスコンテキスト(HDC型で参照する対象)の型には以下の4種類が存在します。 Type 和訳 概要 Display 画面 ビデオ画面への描画操作をサポート…

Windows BS_SPLITBUTTONとHDF_SPLITBUTTON

C#の標準コントロール(Button、ColumnHeader)で実装されていないので気付きませんでしたが、Button(標準コントロール)、Header(コモンコントロール)にスプリットボタン機能が追加されていました。 ButtonではウィンドウスタイルのBS_SPLITBUTTON、Head…

C# 現在使用されているMicrosoft Windows SDKの場所とバージョンを取得する

C#で現在使用されているMicrosoft Windows SDKの場所とバージョンを取得するにはレジストリを参照します。64ビット環境で32ビットアプリケーションを起動した場合、WOW64により異なるキーを参照してしまうことに注意してください。 レジストリキーの場所 HKE…

C# 9 IShellItemインターフェイスをパスから作成する

IShellItemインターフェイスをパスから作成して表示名、親フォルダとその表示名を取得するサンプルコードです。 using System; using System.Runtime.InteropServices; var item = default(IShellItem); try { item = NativeMethods.SHCreateItemFromParsing…

C# BitmapData.Scan0の操作でAccessViolationException例外が発生する理由と対処

本文 Image.FromHbitmap関数で作成したビットマップのような一部のビットマップではBitmap.LockBitsメソッドが返すBitmapDataのStrideが負の値になります。このようなビットマップはボトムアップ形式と呼ばれ、Scan0はビットマップの最終列の最初のピクセル…

C++ ドロップされたOLEデータオブジェクトのクリップボード形式実例

はじめに Windows 10 64 bit環境でウィンドウにドロップしたときのOLEデータオブジェクトに含まれるクリップボード形式の確認結果です。詳細は各自ご確認下さい。 出力例 デスクトップからPCをドロップ c0ca (Shell IDList Array) c0d3 (Preferred DropEffec…

C# ドロップされたデータのフォーマット形式を列挙する

DragEventArgs eとComTypes.IDataObject型 DragDropイベントなどで使用されるe.DataはSystem.Windows.Forms.IDataObject型ですが、System.Runtime.InteropServices.ComTypes.IDataObject型(以下ComTypes.IDataObject型)へ明示的に変換することができます。…

Win32 API リソースIDのマクロ

概要 Win32 APIのリソースIDの定義や操作で使用されるマクロの簡単な情報です。具体的には次のマクロの概要を説明します。 IS_INTRESOURCE MAKEINTRESOURCE[A/W] リソースIDは環境(32、64ビットあるいはA/W)に関わらず、16ビットの範囲内にあれば整数型、…

C# レジストリの間接文字列から対応するテキストリソースを抽出するクラス

概要 shlwapi.dllのSHLoadIndirectString関数を使用してレジストリで使用されるindirect string("@location,id"等)を元の文字列に変換するクラスとサンプルコードです。この表記は主にレジストリで使用され、DLLに含まれる文字列リソースを参照する場合に…

C++11 IMAGE_COR20_HEADERを取得する

概要 32ビット形式のPEファイルを生データとして解析してIMAGE_COR20_HEADER構造体を取得するサンプルコードです。実際にはIMAGE_COR20_HEADER構造体のメインであろうメタデータは今後の拡張に備えてフォーマット非公開なのでCLSID_CorMetaDataDispenserで公…