// CsProcessBaseName.cpp : このファイルには 'main' 関数が含まれています。プログラム実行の開始と終了がそこで行われます。
//

#include <tchar.h>
#include <iostream>
#include <windows.h>
#include <psapi.h>



// lib
#pragma comment ( lib, "psapi.lib" )



/*
    プロセスIdからプロセス名を取得します。
*/
int _tmain
(
    int argc
    , _TCHAR* argv[]
)
{
    /*
        std::wcoutのロケールを設定
         これを設定するだけで、std::wcoutで日本語が表示される
         ようになります。
    */
    std::wcout.imbue(std::locale("", std::locale::ctype));

    // プロセスIdの取得(カレントプロセス)
    DWORD dwProcessId = ::GetCurrentProcessId();

    // プロセスハンドルをオープン
    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId);
    if (NULL != hProcess) {

        // プロセス名の受け取り場所
        TCHAR waBaseName[MAX_PATH];

        // プロセスハンドルからプロセス名を取得します。
        ::GetModuleBaseName(hProcess, NULL, waBaseName, _countof(waBaseName));

        // プロセス名の表示
        std::wcout << L"プロセス名 = " << waBaseName << std::endl;

        // プロセスハンドルのクローズ
        ::CloseHandle(hProcess);
    }

    // 正常終了
    return(0);
}

// プログラムの実行: Ctrl + F5 または [デバッグ] > [デバッグなしで開始] メニュー
// プログラムのデバッグ: F5 または [デバッグ] > [デバッグの開始] メニュー

// 作業を開始するためのヒント: 
//    1. ソリューション エクスプローラー ウィンドウを使用してファイルを追加/管理します 
//   2. チーム エクスプローラー ウィンドウを使用してソース管理に接続します
//   3. 出力ウィンドウを使用して、ビルド出力とその他のメッセージを表示します
//   4. エラー一覧ウィンドウを使用してエラーを表示します
//   5. [プロジェクト] > [新しい項目の追加] と移動して新しいコード ファイルを作成するか、[プロジェクト] > [既存の項目の追加] と移動して既存のコード ファイルをプロジェクトに追加します
//   6. 後ほどこのプロジェクトを再び開く場合、[ファイル] > [開く] > [プロジェクト] と移動して .sln ファイルを選択します