現在実行しているアプリケーションを列挙するには,以下の様にする.
Windows95 系と WindowsNT 系で分ける必要がある.
タスクリスト
Windows95 系
int GetModuleFileName95(HWND hWnd, HMODULE hModule, LPSTR lpszFile, int nSize)
{
HANDLE hSnapshot;
HANDLE (WINAPI *CreateToolhelp32Snapshot)(DWORD, DWORD);
BOOL (WINAPI *Process32First)(HANDLE, LPPROCESSENTRY32);
BOOL (WINAPI *Process32Next)(HANDLE, LPPROCESSENTRY32);
HMODULE hKernel;
PROCESSENTRY32 pe32;
DWORD dwProcessId;
int nRet;
lpszFile[0] = '\0';
nRet = lstrlen(lpszFile);
GetWindowThreadProcessId(hWnd, &dwProcessId);
hKernel = GetModuleHandle("kernel32.dll");
CreateToolhelp32Snapshot = (HANDLE (WINAPI *)(DWORD, DWORD))
GetProcAddress(hKernel, "CreateToolhelp32Snapshot" );
Process32First = (BOOL (WINAPI *)(HANDLE, LPPROCESSENTRY32))
GetProcAddress(hKernel, "Process32First") ;
Process32Next = (BOOL (WINAPI *)(HANDLE, LPPROCESSENTRY32))
GetProcAddress(hKernel, "Process32Next") ;
if( (CreateToolhelp32Snapshot == NULL) ||
(Process32First == NULL) ||
(Process32Next == NULL) ) {
return(nRet);
}
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if( hSnapshot == NULL ) {
return(nRet);
}
memset(&pe32, 0, sizeof(pe32));
pe32.dwSize = sizeof(pe32);
Process32First(hSnapshot, &pe32);
do {
if (pe32.th32ProcessID == dwProcessId) {
lstrcpyn(lpszFile, pe32.szExeFile, nSize);
nRet = lstrlen(lpszFile);
break;
}
} while (Process32Next(hSnapshot, &pe32) != FALSE);
CloseHandle(hSnapshot);
return(nRet);
}
WindowsNT 系
DWORD dwProcessID;
GetWindowThreadProcessId(hWnd, &dwProcessID);
HANDLE hProcess;
hProcess = OpenProcess( (PROCESS_QUERY_INFORMATION | PROCESS_VM_READ),
FALSE,
dwProcessID);
if( hProcess != NULL ) {
HMODULE hMod ;
DWORD cbNeeded;
if( EnumProcessModules(hProcess,
&hMod,
sizeof(hMod),
&cbNeeded) != NULL) {
GetModuleFileNameEx(hProcess,
hMod,
chFileName,
(sizeof(chFileName) - 1) );
}
}
Microsoft Knowledge Baseの以下の文書が参考
文書番号:J041632
[SDK32]Win32 でアプリケーションを列挙する方法
参照
PSAPI