#include <windows.h>
#include <tlhelp32.h>
#include <vector>
#include <iostream>
using namespace std;
int main(void)
{
HANDLE hSnapshot;
PROCESSENTRY32 pe32;
vector<PROCESSENTRY32> plist1, plist2;
vector<PROCESSENTRY32> newlist, oldlist;
SIZE_T i, j;
BOOL bFound;
plist1.clear();
hSnapshot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
pe32.dwSize = sizeof(pe32);
if (::Process32First(hSnapshot, &pe32))
{
do {
plist1.push_back(pe32);
} while(::Process32Next(hSnapshot, &pe32));
}
CloseHandle(hSnapshot);
for(;;)
{
plist2 = plist1;
plist1.clear();
hSnapshot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
pe32.dwSize = sizeof(pe32);
if (::Process32First(hSnapshot, &pe32))
{
do {
plist1.push_back(pe32);
} while(::Process32Next(hSnapshot, &pe32));
}
CloseHandle(hSnapshot);
newlist.clear();
oldlist.clear();
for(i = 0; i < plist1.size(); i++)
{
bFound = FALSE;
for(j = 0; j < plist2.size(); j++)
{
if (plist1[i].th32ProcessID == plist2[j].th32ProcessID)
{
bFound = TRUE;
break;
}
}
if (!bFound)
{
newlist.push_back(plist1[i]);
}
}
for(j = 0; j < plist2.size(); j++)
{
bFound = FALSE;
for(i = 0; i < plist1.size(); i++)
{
if (plist1[i].th32ProcessID == plist2[j].th32ProcessID)
{
bFound = TRUE;
break;
}
}
if (!bFound)
{
oldlist.push_back(plist2[j]);
}
}
if (!oldlist.empty() || !newlist.empty())
{
SYSTEMTIME st;
GetLocalTime(&st);
printf("%02d:%02d:%02d\n", st.wHour, st.wMinute,
st.wSecond);
}
for(i = 0; i < oldlist.size(); i++)
{
printf("OLD: #%08X %s\n", oldlist[i].th32ProcessID,
oldlist[i].szExeFile);
}
for(i = 0; i < newlist.size(); i++)
{
printf("NEW: #%08X %s\n", newlist[i].th32ProcessID,
newlist[i].szExeFile);
}
}
return 0;
}