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

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

C++

C++&ATLでフォルダのファイル名に使えない文字を取得する

概要 Windows 10でC++&ATLでフォルダのファイル名に使えない文字を取得するには次の手順を踏みます。具体的なサンプルコード等は後に示します。 COMを初期化する。 デスクトップのIShellFolderインターフェイスを取得する。 ファイル名に使えない文字を取得…

C++&ATLでフォルダのファイル名の最大長を取得する

概要 Windows 10でC++&ATLでフォルダのファイル名の最大長を取得するには次の手順を踏みます。具体的なサンプルコード等は後に示します。 COMを初期化する。 デスクトップのIShellFolderインターフェイスを取得する。 ファイル名の最大長を取得したいフォル…

ATLのCAtlArray<CComPtr<...>>の動作確認

ATLのCAtlArray<CComPtr<...>>クラスの動作確認用サンプルコードです。CAtlArrayクラスは自身のデストラクタで要素のデストラクタを呼び出すかどうかを確認するために作成しました。結論として、CAtlArray<CComPtr<...>>クラスは自力で個々の要素を解放することなくデストラクタを呼び</ccomptr<...></ccomptr<...>…

IUnknownの実装例とATL CComPtr&CComQIPtrの動作確認

IUnknownを自前で実装する方法とATLメモリ管理クラスであるCComPtrクラスおよびCComQIPtrクラスの動作確認を兼ねたサンプルコードです。 main関数内部のコメントは主にOutputDebugStringで出力される内容です。 IUnknownインターフェイスではなくIClassFacto…

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 デスクトップ ウィザードで空のアプリ…

CPUID(インラインアセンブリ)の覚書

はじめに アセンブリの命令コードCPUIDを使用することでCPUの基本情報を取得することができます。Microsoft Visual C++ではインラインアセンブリ(__asmステートメント)(32ビット環境限定)あるいはintrin.hの__cpuid関数(32ビットおよび64ビット)を使用…

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

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

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