Я нашел способ сделать это, спасибо Wimmel.
Для получения идентификатора процесса вы можете использовать GetParentProcessId()
. И вам нужна эта функция:
ULONG_PTR GetParentProcessId() // By Napalm @ NetCore2K
{
ULONG_PTR pbi[6];
ULONG ulSize = 0;
LONG (WINAPI *NtQueryInformationProcess)(HANDLE ProcessHandle, ULONG ProcessInformationClass,
PVOID ProcessInformation, ULONG ProcessInformationLength, PULONG ReturnLength);
*(FARPROC *)&NtQueryInformationProcess =
GetProcAddress(LoadLibraryA("NTDLL.DLL"), "NtQueryInformationProcess");
if(NtQueryInformationProcess){
if(NtQueryInformationProcess(GetCurrentProcess(), 0, &pbi, sizeof(pbi), &ulSize) >= 0 && ulSize == sizeof(pbi))
return pbi[5];
}
return (ULONG_PTR)-1;
}
, чтобы получить Имя процесса от процесса Id ProcessName(GetParentProcessId())
.
И тогда вам будет нужна эта функция:
char* ProcessName(int ProcessId){
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hSnapshot) {
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(PROCESSENTRY32);
if(Process32First(hSnapshot,&pe32)) {
do {
int th32ProcessID = pe32.th32ProcessID;
if (th32ProcessID == ProcessId)
return pe32.szExeFile;
} while(Process32Next(hSnapshot,&pe32));
}
CloseHandle(hSnapshot);
}
return 0;
}
Check 'ARGV [0]', чтобы получить имя программы запущен. Вы не можете получить имя процесса родителя простым способом. –
@ πάνταῥεῖ, в этом случае он хочет, чтобы родительский 'argv [0]'. AFAIK нет стандартного способа сделать это на языке (или, возможно, на любом языке). Итак, какая ОС это? Окна? –
Как просмотреть родительский PID, см. [Этот вопрос] (http://stackoverflow.com/q/5321914/33499). И [этот вопрос] (http://stackoverflow.com/q/23593688/33499) как получить имя файла из PID. – wimh