Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Mr.Blue en 13 Junio 2010, 01:14 am



Título: Problema al tomar un PID
Publicado por: Mr.Blue en 13 Junio 2010, 01:14 am
Bueno les comento estuve viendo como tomar el pid de una ventana, pero no logro hacer andar unas funciones de la cabezera windows.h .
Si no me equivoco y por lo que vi en msdn.microsoft.com la sintaxis es la correcta.
no se si sera por el compilador o SO que utilizo pero me parece raro.
por las dudas dejo esos datos
Windows Vista.
Dev-C++ 4.9.9.2

Aca el code

Código
  1. #include <windows.h>
  2.  
  3. main(){
  4. system ("holamundo");
  5. system("title Hola");
  6. system ("pause");
  7. }
  8.  
Eh leido mucho por ahi que no es bueno llamar al sistema, de paso si me explican "el porque" se los agradezco  :P.
a fines de este programa es entender un poco el funcionamiento de las funciones que a continuacion  aparecen como comentario.

Código
  1. #include <windows.h>
  2. #include <stdio.h>
  3.  
  4. main()
  5. {
  6. HWND encontre;
  7. //DWORD pid;
  8. HANDLE proceso;
  9.  
  10.  
  11. encontre = FindWindow(NULL, "Hola");
  12. if (encontre == 0)
  13. printf ("Ventana cerrada\n\a");
  14. else
  15. printf ("Ventana abierta\n\a");
  16. //DWORD pid GetWindowThreadProcessId(encontre,&pid);  /* Estas son las las funciones que no logro.
  17. //proceso =OpenProcess(PROCESS_ALL_ACCESS,0,pid);
  18. //CloseHandle(proceso);*/
  19. system ("pause");
  20. }

El problema surge ahi en el comentario sin eso el programa anda...
a continuacion les muestro que error me tira el dev

 C:\Dev-Cpp\Ejercicios de ejemplos\SinNombre3.cpp In function `int main()':
16 C:\Dev-Cpp\Ejercicios de ejemplos\SinNombre3.cpp expected `;' before "GetWindowThreadProcessId"


Título: Re: Problema al tomar un PID
Publicado por: Littlehorse en 13 Junio 2010, 01:55 am
A simple vista es esto lo que esta mal:

Código
  1. //DWORD pid GetWindowThreadProcessId(encontre,&pid);  /* Estas son las las funciones que no logro.
  2.  

Estas definiendo una especie de prototipo y llamada al mismo tiempo, lo cual es incorrecto.

Código
  1. HWND h = FindWindow(NULL, "hola");
  2. if(h)
  3. {
  4. DWORD pid;
  5. GetWindowThreadProcessId(h,&pid);
  6. cout<<"PID: "<<pid<<endl;
  7. HANDLE proc=OpenProcess(PROCESS_ALL_ACCESS,0,pid);
  8. }
  9. else
  10.  return 1;

Deberia funcionar. Para estos casos ten en cuenta revisar primero la msdn

GetWindowThreadProcessId (http://msdn.microsoft.com/en-us/library/ms633522%28VS.85%29.aspx)
FindWindow (http://msdn.microsoft.com/en-us/library/ms633499%28VS.85%29.aspx)
OpenProcess (http://msdn.microsoft.com/en-us/library/ms684320%28VS.85%29.aspx)

Citar
Eh leido mucho por ahi que no es bueno llamar al sistema, de paso si me explican "el porque" se los agradezco  :P.
a fines de este programa es entender un poco el funcionamiento de las funciones que a continuacion  aparecen como comentario.

Porque utilizarla tiene una sobrecarga bastante grande. Suspender el programa, reservar la memoria para la llamada al sistema, buscar el comando, etc. Tanto C como C++ son lenguajes en los cuales se puede lograr un rendimiento muy importante, por lo tanto ese tipo de practicas no suelen ser recomendables.

Obviamente en mas de una oportunidad te basta con usar system, pero es preferible no hacerlo.

Y por cierto, main debe devolver un entero.

Saludos


Título: Re: Problema al tomar un PID
Publicado por: Mr.Blue en 13 Junio 2010, 02:10 am
Ahh.. graciass Littlehorse sos groso  ;-)

Funciona ahora