Windowsコード集 上のページ

#0026 アプリケーションの列挙

Windows95/98/2000で使える、起動中のアプリケーションを列挙する方法です。
私の場合こういう列挙系はFirst,Nextという単純なメンバで呼び出せる、隠蔽化されたクラスを作る事が多いです。

// クラス定義
class CEnumApplication{
protected:
    HANDLE m_handle;
    PROCESSENTRY32 m_process;
public:
    CEnumApplication():m_handle(NULL){;}
    ~CEnumApplication(){Close();}
    VOID Close(){
        if(m_handle != NULL)CloseHandle(m_handle);
        m_handle = NULL;}
    PROCESSENTRY32 *First();
    PROCESSENTRY32 *Next();
    LPSTR GetExeFile(){return m_process.szExeFile;}
    DWORD GetProcessID(){return m_process.th32ProcessID;}
    DWORD GetModuleID(){return m_process.th32ModuleID;}
};

// メンバ関数
PROCESSENTRY32 *CEnumApplication::First()
{
    Close();

    if((m_handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0)) == NULL){
        return NULL;
    }

    ZeroMemory(&m_process,sizeof(PROCESSENTRY32));
    m_process.dwSize = sizeof(PROCESSENTRY32);
    if(Process32First(m_handle,&m_process)){
        return &m_process;
    }
    return NULL;
}

PROCESSENTRY32 *CEnumApplication::Next()
{
    if(Process32Next(m_handle,&m_process)){
        return &m_process;
    }
    return NULL;
}



// アプリケーションの列挙サンプルです。
// 以下は、列挙された中から notepad.exe を探すようにしています。
CEnumApplication app;
if(app.First() != NULL){
    do{
        if(lstrcmpi(app.GetExeFile,"notepad.exe") == 0){
            //
            // notepad.exe が見つかった場合
            //
        }
    }while(app.Next() != NULL);
}


上のページ