カタバミさんのプログラミングノート

日曜プログラマーがプログラミング関係のメモを記録するブログです。

Win32 API

C#でWin32 API TaskDialog関数を呼び出すサンプルコード

C#でTaskDialogを表示するにはWin32 APIのTaskDialog関数(comctl32.dll)を呼び出すサンプルコードです。適当なC#のWindows フォーム アプリケーション (.NET Framework) プロジェクトのForm1にボタン(Button1)を作成して、Clickイベントの名前を合わせて…

「Windowsの標準コントロール」と「C#の標準コントロール」

本文 前回の記事で平然と(Windows 10の)「標準コントロール」「コモンコントロール」と「C#の標準コントロール」という言葉を使ってしまったのですが、冷静に振り返ればこれらの言葉遣いは正しかったのかなと。多分に想像ですが、以下がその回答に近いかな…

C#でIEnumStringインターフェイスを実装する

C#でIEnumStringインターフェイスを実装するには、System.Runtime.InteropServices.COMTypes名前空間で定義されたC#のIEnumStringインターフェイスが利用できます。このインターフェイスを継承したクラスを実装することでCOMのIEnumStringインターフェイスを…

IShellItem.BindToHandler関数のBHID_StorageEnumとBHID_EnumItemsの違い

IShellItem.BindToHandler関数の引数にBHID_StorageEnumとBHID_EnumItemsを指定した場合、以下の点が異なります。 BHID 概要 BHID_StorageEnum 作成されたIEnumShellItemsはファイルシステムオブジェクトのみ列挙する。 BHID_EnumItems 作成されたIEnumShell…

WindowsのCOM関係レジストリキーの場所

WindowsのCOM関係のレジストリキーは次の場所に存在します。 ProgID、CLSID、Interfaceキー等 基本情報 DebugObjectRPCEnabledキー ノート 参考 ProgID、CLSID、Interfaceキー等 HKEY_LOCAL_MACHINE\Software\Classes HKEY_CURRENT_USER\Software\Classes HK…

HKEY_LOCAL_MACHINE、HKEY_CURRENT_USER、HKEY_CLASSES_ROOT

本文 HKEY_LOCAL_MACHINE、HKEY_CURRENT_USER、HKEY_CLASSES_ROOTは何れもレジストリのルートキーとして扱われる定義済みキー(Predefined Keys)ですが、その内容はログインするユーザーにより異なります。HKEY_LOCAL_MACHINEはどのユーザーでログインして…

C#用IShellFolderのファイル名(表示名)変更に必要な関数のラッパーを提供するクラスと拡張メソッドファイル

概要とコード サンプルコード 概要とコード 動作確認環境:Windows 10 64ビット、Microsoft Visual Studio 2019、C# 7.3 Win32 API IShellFolderインターフェイスのファイル名(表示名)変更に必要な関数のラッパーを提供するクラスと拡張メソッドファイルの…

Win32 API CIDA構造体のラッパークラス

特殊ファイル・フォルダのドロップ受け入れで使用することを目的としたWin32 API CIDA構造体のラッパークラスです。unsafeの使用を避けるためにGCHandleを使用しており、プロジェクトの設定変更が不用な代わりにGCHandleによるコストが発生します。 動作確認…

C# Win32 API STRRET構造体のラッパー構造体

C#でWin32 APIのSTRRET構造体を扱うためのラッパー構造体です。継承や内部データの操作は考慮しておらず、string型(文字列)への変換とメモリ解放処理のみ提供しています。 動作確認環境:Windows 10 64ビット、Microsoft Visual Studio 2019、C# 7.3

C#であるAndroid端末のファイルのドロップ処理を実装する場合の注意

動作確認環境:Windows 10 64ビット、Microsoft Visual Studio 2019、C# 7.3 本文 FileDropフォーマットが存在しないことに対する対処 DragOverイベントハンドラにおけるData.Effect設定の注意 参考 本文 あるAndroid機種はメーカーの公開するドライバをイン…

Microsoft Visual Studio 2019 Community付属のSpy++

Microsoft Visual Studio 2019 Communityに付属している便利なソフトウェアSpy++の概要等。 Spy++の概要 ウィンドウをツリーやファインダーで検索して各種情報(親子関係、ハンドル、ウィンドウタイトル、クラス名、その他諸々)を確認できる便利なソフトウ…

VBAのPtrSafe/LongPtr

VBAにも64ビット対応の波が押し寄せていたらしく、DeclareステートメントにPtrSafe属性、データ型にLongPtr型が追加されていました。PtrSafeの無いDeclareステートメントの呼び出しは64ビット環境ではエラーとなり、LongPtr型はC/C++のポインタ(void*等)同…

VC2019のWinMain関数(wWinMain関数、_tWinMain関数)

VC2019のWinMain関数(wWinMain関数、_tWinMain関数)はプログラムの起動時に最初に呼び出される関数ではありません。実際にはCRTの用意したWinMainCRTStartup関数が呼び出され、コンストラクタ/デストラクタの呼び出し、標準関数やデバッグ情報の初期化/…

ATLのクラスでCOMのインターフェイス及びポインタ管理を簡略化する方法

ATLのクラスを利用することでCOMのインターフェイス及びポインタ管理を簡略化することができます。具体的には以下が利用可能です。 目的 ATLクラス IUnknown継承インターフェイスのポインタ管理 ATL::CComPtr、ATL::CComQIPtr CoTaskMemFree関数で解放するメ…

C++でATLを使用してデスクトップの最初のオブジェクトの表示名を取得する

ATLを使用してデスクトップの最初のオブジェクトの表示名を取得するサンプルコードです。 開発環境:Windows 10、Microsoft Visual Studio 2019、C++17 #define STRICT #include <Windows.h> #include <ShlObj.h> #include <atlbase.h> #include <atlcom.h> HRESULT CreateFirstObjectItemFromShellFold</atlcom.h></atlbase.h></shlobj.h></windows.h>…

C++&STLで特殊フォルダの動作を取得するサンプルコード

Windows環境、C++でSTLを使用して特殊フォルダの動作一覧を取得するサンプルコードです。サンプルコードではごみ箱の動作を取得します。開発環境はWindows10、Microsoft Visual Studio Community 2019 (Version 16.0.2)、MSVC v142、Windows 10 SDK (10.0.17…

C++&STLでごみ箱の最初の項目を元の場所に戻すサンプルコード

Windows環境、C++でSTLを使用してごみ箱の最初の項目を元の場所に戻すサンプルコードです。実行すると確認なしで最初の項目が元の場所に戻されることに注意してください。開発環境はWindows10、Microsoft Visual Studio Community 2019 (Version 16.0.2)、MS…

C++でごみ箱の最初の項目の動作一覧を取得するサンプルコード

Windows環境、C++でごみ箱の最初の項目のコンテキストメニューで実行できる動作一覧を取得するサンプルコードです。開発環境はWindows10、Microsoft Visual Studio Community 2019 (Version 16.0.2)、MSVC v142、Windows 10 SDK (10.0.17763.0)です。Windows…

C++でごみ箱の最初の項目の名前を取得するサンプルコード

Windows環境、C++でごみ箱の最初の項目の名前を取得するサンプルコードです。開発環境はWindows10、Microsoft Visual Studio Community 2019 (Version 16.0.2)、MSVC v142、Windows 10 SDK (10.0.17763.0)です。Windows デスクトップ ウィザードで空のアプリ…

C#で実行ファイルの会社名にMicrosoftを含むレジストリに登録されたCOMクラスを選択する方法

C#、Windows 10でレジストリに登録されたCOMクラスから実行ファイルの会社名にMicrosoftを含むものを選択するソースコードです。 概要 ソースコード 出力例(抜粋) 補足説明 COMクラスの登録場所 レジストリとWOW64 名前付きタプル インデックス付きSelect …

Visual C++ 2017でATLを利用してWord.Applicationのインスタンスを作成する方法

概要 Visual C++ 2017でATLを利用してWord.Applicationのインスタンスを作成する方法のサンプルコードです。この例では作成したインスタンスからWordのバージョンを取得します。 ソースコード #define STRICT #include <Windows.h> #include <atlbase.h> using namespace::ATL; voi</atlbase.h></windows.h>…

Visual C++ 2017でATLを利用してScripting.FileSystemObjectのインスタンスを作成する方法

概要 Visual C++ 2017でATLを利用してScripting.FileSystemObjectのインスタンスを作成する方法のサンプルコードです。この例では作成したインスタンスから現在のフォルダの名前を取得します。 ソースコード #define STRICT #include <Windows.h> #include <atlbase.h> using names</atlbase.h></windows.h>…

特定機能を提供するCOMクラスの登録情報をGoogle検索とレジストリ エディターから特定する方法

背景と目的 Windowsの機能をWSH、C#、VBなどから使用するとき、Windowsの提供するCOMクラスの利用が便利な場合があります。COMクラスの呼び出しにはCLSIDまたはCOMクラス識別名が必要になりますが、MSDNからこれらが検索しにくい場合があります。この文章で…

Pythonでウィンドウハンドルを列挙する

はじめに PythonからctypesパッケージでWin32 APIを呼び出してトップレベルウィンドウのハンドルとタイトルを列挙するサンプルです。素人なので不束かな点も多いと思います。また、使用していない関数は実装のみでテストを行っていません。 ソースコード win…

Pythonから固定長文字列を含む構造体を要求するWin APIを呼び出す他

Pythonから固定長文字列を含む構造体を要求するWin APIを呼び出す方法のサンプルと途中で学んだことの覚書です。最初は実際のコードから。 サンプルコード このコードではGetVersionEx関数とOSVERSIONINFO構造体(固定長文字列''TCHAR szCSDVersion[128]''を…

ドライブのジオメトリ情報(物理的なサイズ情報)の取得(IOCTL_DISK_GET_DRIVE_GEOMETRY)

DeviceIoControl関数を用いてドライブの物理ディスクジオメトリ情報(物理的なサイズ情報)を取得するサンプルコードです。この投稿ではIOCTL_DISK_GET_DRIVE_GEOMETRYを用いた場合を紹介します。詳細な説明はいつか。 シンプルなコード #define STRICT #inc…