DWORD PidFromPartialProcessName(LPWSTR szProcess)
{
LPWSTR pSpec = NthArgument(szProcess, 0, NULL, NULL);
if ( pSpec == NULL )
return 0;
StripEnclosingQuotes(pSpec);
DWORD rv = 0;
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if ( hSnap == INVALID_HANDLE_VALUE )
return error(GetLastError(), NULL);
PROCESSENTRY32 pe = {sizeof(PROCESSENTRY32), 0};
if ( Process32First(hSnap, &pe) )
{
do
{
if ( stristr(pe.szExeFile, pSpec )
|| !WildcardComparison(pSpec, pe.szExeFile, 0, 1) )
{
rv = pe.th32ProcessID;
break;
}
}
while ( Process32Next(hSnap, &pe) );
}
CloseHandle(hSnap);
return rv;
}
INT WINAPI f_ISAPP ( LPWSTR psz )
{
Sprintf( psz, L"%lu", PidFromPartialProcessName(psz));
return 0;
}