hoi alle zusammen!
sodala, hab wiedermal ein problem i sachen c++ und so..
mein code:
ein bisschen erläuterung: die funktion kriegt also argv[1] einen prozessnamen und holt sich mit der funktion name2pid alle pids, die diesen prozessnamen haben. soweit sogut, aber sobalt ich den auskommentierten teil wieder "einkommentiere", schmiert mri das ganze (komplett ohne fehlermeldung ?() einfach ab..
hier noch der code der name2pid() [die fuellt das uebergebene array mit den pids auf, wobei das erste element des arrays die anzahl der zurueckgegebenen pids angibt.]
irgendwer ne erklärung, an was das liegt? meiner meinung nach irgendwas mit dem puffer modPath, in den der pfad geschrieben wird, denn je nachdem wie und wo ich den deklariere, variieren die ergebnisse, aber funktioniert hats noch nie X(
mfg jacky
edit: achja, gibts eigentlich ne explizite methode, um bei einem edit feld einen text dranzuhängen? also z.b. wie bei einem chat-fenster.. denn momentan kopier ich zuerst den ganzen alten inhalt, häng das neue dran und kopiers dann wieder rein, und das is anscheinend nich sehr ressourcensparend...
sodala, hab wiedermal ein problem i sachen c++ und so..
mein code:
Code:
#define MAX_PIDS 30
char *puf = (char*)malloc(BUFMAX);
DWORD pids[MAX_PIDS];
printf("***** !procpid\n\tPID listing for %s:\n", argv[1]);
name2pid(argv[1], (DWORD *)&pids, MAX_PIDS);
if(!pids[0]) {
AddText(ctl_stat, "** No Process with this name found!");
printf("\tNo process found\n");
}
else {
for(int i=1;i<=pids[0];i++) {
bool dwRet = false;
HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pids[i]);
/*if(hProcess) {
GETMODULEFILEN imp_GetModuleFileNameEx = (GETMODULEFILEN)GetProcAddress(LoadLibrary("psapi.dll"), "GetModuleFileNameExA");
dwRet = imp_GetModuleFileNameEx(hProcess, NULL, modPath, MAX_PATH);
}
if(!hProcess || !dwRet)*/
sprintf(modPath, "**Error retrieving module path. [%i]", GetLastError());
printf("\t[%5i]\t%s\n", pids[i], modPath);
}
}
free(puf);
hier noch der code der name2pid() [die fuellt das uebergebene array mit den pids auf, wobei das erste element des arrays die anzahl der zurueckgegebenen pids angibt.]
Code:
#define SystemProcessInformation 5
int name2pid(char*pName, DWORD outArray[], int maxpids)
{
DWORD len = 0;
BYTE * buf = (BYTE*)malloc(BUFMAX);
char * procname = (char*)malloc(1024);
strcpy(procname, pName);
outArray[0] = 0;
NTQUERYSYSINFO NtQuerySystemInphormation = (NTQUERYSYSINFO)GetProcAddress(LoadLibrary("ntdll.dll"), "NtQuerySystemInformation");
NtQuerySystemInphormation(SystemProcessInformation, buf, BUFMAX, &len);
SYSTEM_PROCESS_INFORMATION* info = (SYSTEM_PROCESS_INFORMATION*)buf;
static char temp[1024];
for(;;)
{
sprintf(temp,"%S",info->ImageName);
if (stricmp(temp,procname)==0) if(++outArray[0]<=maxpids) outArray[outArray[0]] = (DWORD)info->UniqueProcessId;
if (info->NextEntryOffset==0) break;
(DWORD)info += info->NextEntryOffset;
}
free(procname);
free(buf);
return 0;
}
irgendwer ne erklärung, an was das liegt? meiner meinung nach irgendwas mit dem puffer modPath, in den der pfad geschrieben wird, denn je nachdem wie und wo ich den deklariere, variieren die ergebnisse, aber funktioniert hats noch nie X(
mfg jacky
edit: achja, gibts eigentlich ne explizite methode, um bei einem edit feld einen text dranzuhängen? also z.b. wie bei einem chat-fenster.. denn momentan kopier ich zuerst den ganzen alten inhalt, häng das neue dran und kopiers dann wieder rein, und das is anscheinend nich sehr ressourcensparend...