Problema al tomar un PID

Iniciado por Mr.Blue, 13 Junio 2010, 01:14 AM

0 Miembros y 1 Visitante están viendo este tema.

Mr.Blue

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 (cpp) [Seleccionar]
#include <windows.h>

main(){
system ("holamundo");
system("title Hola");
system ("pause");
}

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 (cpp) [Seleccionar]
#include <windows.h>
#include <stdio.h>

main()
{
HWND encontre;
//DWORD pid;
HANDLE proceso;


encontre = FindWindow(NULL, "Hola");
if (encontre == 0)
printf ("Ventana cerrada\n\a");
else
printf ("Ventana abierta\n\a");
//DWORD pid GetWindowThreadProcessId(encontre,&pid);  /* Estas son las las funciones que no logro.
//proceso =OpenProcess(PROCESS_ALL_ACCESS,0,pid);
//CloseHandle(proceso);*/
system ("pause");
}


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"

Littlehorse

A simple vista es esto lo que esta mal:

Código (cpp) [Seleccionar]
//DWORD pid GetWindowThreadProcessId(encontre,&pid);  /* Estas son las las funciones que no logro.


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

Código (cpp) [Seleccionar]
HWND h = FindWindow(NULL, "hola");
if(h)
{
DWORD pid;
GetWindowThreadProcessId(h,&pid);
cout<<"PID: "<<pid<<endl;
HANDLE proc=OpenProcess(PROCESS_ALL_ACCESS,0,pid);
}
else
  return 1;


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

GetWindowThreadProcessId
FindWindow
OpenProcess

CitarEh 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
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

Mr.Blue

#2
Ahh.. graciass Littlehorse sos groso  ;-)

Funciona ahora