OK get it working
Code:
#include <windows.h>
#include <tlhelp32.h>
#include <iostream>
#include <string>
#include "psapi.h"
DWORD GetProcessByFileName(char* name){
DWORD process_id_array[1024];
DWORD bytes_returned;
DWORD num_processes;
HANDLE hProcess;
char image_name[256];
char buffer[256];
int i;
DWORD exitcode;
EnumProcesses(process_id_array, 256*sizeof(DWORD), &bytes_returned);
num_processes = (bytes_returned/sizeof(DWORD));
for (i = 0; i < num_processes; i++) {
hProcess=OpenProcess(PROCESS_ALL_ACCESS,TRUE,process_id_array[i]);
if(GetModuleBaseName(hProcess,0,image_name,256)){
if(!stricmp(image_name,name)){
CloseHandle(hProcess);
return process_id_array[i];
}
}
CloseHandle(hProcess);
}
return 0;
}
void __cdecl main(int argc, char *argv[])
{
DWORD dwPID;
dwPID = GetProcessByFileName("calc.exe");
printf("%lu", (unsigned long)dwPID);
return;
}
But only for Debug compilation not for release. When I use release I get these linker errors:
processid error LNK2019: unresolved external symbol _GetModuleBaseNameA@16 referenced in function "unsigned long __cdecl GetProcessByFileName(char *)" (?GetProcessByFileName@@YAKPAD@Z)
processid error LNK2019: unresolved external symbol _EnumProcesses@12 referenced in function "unsigned long __cdecl GetProcessByFileName(char *)" (?GetProcessByFileName@@YAKPAD@Z)
Why?