Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Ottenere pid
Forum - C/C++ - Ottenere pid - Pagina 3

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
jaco94++ (Normal User)
Expert


Messaggi: 203
Iscritto: 22/10/2008

Segnala al moderatore
Postato alle 21:17
Lunedì, 28/06/2010
Ho avuto dei problemi con il sorgente della microsoft cmq ho trovato una cosa molto simile che mi funzionava cosi sono arrivato alla conclusione (spero sia giusto :D) che le istruzioni che mi dovrebbero servire per ottenere il mio pid siano le seguenti

Codice sorgente - presumibilmente Plain Text

  1. HANDLE hSnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  2. PROCESSENTRY32* processInfo=new PROCESSENTRY32;
  3. processInfo->dwSize=sizeof(PROCESSENTRY32);
  4. while(Process32Next(hSnapShot,processInfo)!=FALSE)
  5. {
  6. cout<<"Process ID: "<<processInfo->th32ProcessID;
  7. }



Ora cosi ottengo tutti i pid esistenti quindi sicuramente va levato il while dopo aver fatto ciò però ho problemi a capire come passare il nome del processo per ottenere il pid e non sò come continuare  ho provato a fare un miscuglio inserendo anche openprocess ma mi richiede il pid del processo e  non il nome ...:d

Ultima modifica effettuata da jaco94++ il 28/06/2010 alle 21:18
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 21:34
Lunedì, 28/06/2010
Perdonami ma ... tutto quello che chiedi adesso c'era nel codice d'esempio della Microsoft ...

Perché non utilizzarlo ?

Se avevi dei problemi, dicceli, non riscopriamo l'acqua calda per altri 20 post ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
jaco94++ (Normal User)
Expert


Messaggi: 203
Iscritto: 22/10/2008

Segnala al moderatore
Postato alle 21:38
Lunedì, 28/06/2010
Il problema e provare modificare ed eseguire il codice perchè quel codice mi da degli errori nel linker (quali errori ? eccoli: )

Codice sorgente - presumibilmente C/C++

  1. Errore  1       error LNK2019: riferimento al simbolo esterno _GetModuleBaseNameA@16 non risolto nella funzione "void __cdecl PrintProcessNameAndID(unsigned long)" (?PrintProcessNameAndID@@YAXK@Z)    C:\Users\Jacopo\Documents\Visual Studio 2010\Projects\prova\prova\main.obj      prova
  2. Errore  2       error LNK2019: riferimento al simbolo esterno _EnumProcessModules@16 non risolto nella funzione "void __cdecl PrintProcessNameAndID(unsigned long)" (?PrintProcessNameAndID@@YAXK@Z)    C:\Users\Jacopo\Documents\Visual Studio 2010\Projects\prova\prova\main.obj      prova
  3. Errore  3       error LNK2019: riferimento al simbolo esterno _EnumProcesses@12 non risolto nella funzione _main        C:\Users\Jacopo\Documents\Visual Studio 2010\Projects\prova\prova\main.obj      prova



ora nn penso ci sia bisogno di qualche cosa per farlo andare dovrebbe bastarmi  copiare il codice ... poi  farlo partire capire come funziona ecc e poi modificarlo il problema e che nn si linka

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 21:43
Lunedì, 28/06/2010
Testo quotato

Postato originariamente da jaco94++:

Il problema e provare modificare ed eseguire il codice perchè quel codice mi da degli errori nel linker (quali errori ? eccoli: )



E non potevi dirlo subito invece di cercare altro codice e allungare il discorso ?

Il codice da' per scontato che il linker utilizzi la libreria psapi.lib. Se non lo hai impostato tra le opzioni del linker, avrai quegli errori. Per rimediare semplicemente, aggiungi solo questa riga all'inizio del codice (nella prima riga)

#pragma comment(lib, "psapi.lib")


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
jaco94++ (Normal User)
Expert


Messaggi: 203
Iscritto: 22/10/2008

Segnala al moderatore
Postato alle 21:46
Lunedì, 28/06/2010
Si potevo dirlo ma volevo fare un pò da solo e poi al massimo se proprio non riuscivo dirlo come ho appena fatto .. semplicemente non volevo farmi bloccare da quel codice solo perche non andava cosi ho provato a trovarne un altro simile tutto qui ... e poi non mi sembrava così grave allungare il discorso cmq ora riproviamo :)

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 22:16
Lunedì, 28/06/2010
capire come funziona il processo di compilazione e linking è molto più importante che cercare un "codice alternativo" per fare la stessa cosa... E' meglio imparare fin da subito a trattare con linker e librerie esterne, perchè altrimenti te le ritroverai per sempre tra i piedi come nei tuoi peggiori incubi :D

PM Quote
Avatar
jaco94++ (Normal User)
Expert


Messaggi: 203
Iscritto: 22/10/2008

Segnala al moderatore
Postato alle 14:40
Martedì, 29/06/2010
@TheKaneB si devo affermare che hai perfettamente ragione!
sta volta però meglio che ho cercato un nuovo codice dato che dopo aver giocato un pò con quello della microsoft ho scoperto che non mi piaceva molto l'output e per quanto lo sistemassi non andava come volevo cmq non importa tnt ho fatto un piccolo miscuglio e ho risolto il mio problema :k:
l'unico inconveniente e che per provare il codie e modificarlo usavo un nuovo progetto e non il mio su cui dovevo mettere il codice cosi quando tranquillo ho spostato il codice da quello di prova al mio progetto non sò come mai ma l'output è diverso, nel senso chè sul progetto di prova mi viene restituito il nome e va tutto bene (poi eseguo un if per confrontare il nome immesso con quello trovato e prendere il pid) mentre che nel mio progetto invece di restituirmi il nome mi restituisce una stringa di numeri presumo sia unicode ma non lo sò e non capisco come sia possibile :d

questo è il codice :
Codice sorgente - presumibilmente C/C++

  1. HANDLE syssnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL);
  2.         PROCESSENTRY32* procinf=new PROCESSENTRY32;
  3.     procinf->dwSize=sizeof(PROCESSENTRY32);
  4.         int index = 0 , index1 = 10;
  5.         while(Process32Next(syssnap,procinf)!=FALSE)
  6.         {
  7.                 cout<<endl<<"Process ID: "<<procinf->th32ProcessID;
  8.                 cout<<endl<<"Name: "<< procinf->szExeFile; // questo è il problema !
  9.                 // qui ci sarebbe l'if
  10.         }
  11.         CloseHandle(syssnap);



output tipo : 00224a34

Ultima modifica effettuata da jaco94++ il 29/06/2010 alle 14:43
PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 14:55
Martedì, 29/06/2010
sembrerebbe un indirizzo... prova ad anteporre un cast esplicito così:

Codice sorgente - presumibilmente C/C++

  1. cout<<endl<<"name: "<< (const char *)procinf->szExeFile; // questo è il problema !


PM Quote
Pagine: [ 1 2 3 4 ] Precedente | Prossimo