FindWindow con array de strings

Iniciado por while, 9 Noviembre 2010, 13:30 PM

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

while

Hola, el objetivo es encontrar una serie de ventanas que guardo en un array:

string MDB[]={
"Firefox",
"Paint",
"Otro"
};

luego pretendo ver si hay alguna abierta mediante un bucle:
for(int i=0; i<=2; i++){
if(FindWindow(NULL,TEXT(MDB)))
...

pero el segundo parametro de FindWindow es const CHAR *, pero tampoco puedo hacer
FindWindow(NULL,TEXT((const CHAR*)MDB)

Alguna solución?
Gracias

Littlehorse

Si no estas usando UNICODE, podes usar el miembro c_str de string:

Código (cpp) [Seleccionar]
string array[]={"name1","name2"};

for(i=0;i<2;i++)
cout<<FindWindow(NULL, array[i].c_str());



Si usas UNICODE, el problema con lo anterior es que no podes usar el miembro c_str, pero igual podes usar wstring para hacerlo:

Código (cpp) [Seleccionar]
wstring array[]={L"name1",L"name2"};

for(i=0;i<2;i++)
cout<<FindWindow(NULL, array[i].c_str());


Igual podes no usar stl strings en absoluto, pero habría que ver el proyecto en general.

Saludos!

An expert is a man who has made all the mistakes which can be made, in a very narrow field.

while

#2
muchas gracias, me servió el primero.

una cosa mas, creéis que podria darme problemas tener un thread
while(true){
... comprobación findwindow ...
}
para verificar en todo momento si se ejecuta X aplicación?
podria lagear al proceso original? es muy pesado el findwindow?
(es para que no se ejecuten programas como cheat engine, etc)

Littlehorse

Como poder, podrias. Y no, no alentaría el proceso original, pero el problema principal es que no va a cumplir con el objetivo correctamente. Es decir, partamos de la base que el titulo de una ventana no es la mejor forma de descubrir si una aplicacion esta siendo ejecutada. Como mínimo, deberías enumerar los procesos para ver si el Cheat Engine se encuentra o no, pero eso tampoco seria suficiente.
Hay muchas formas de verificar si una aplicacion esta o no esta corriendo. En el caso del Cheat Engine, podes verificar si el driver que utiliza esta cargado.

Igualmente si tu idea es proteger tu aplicacion de cualquier modificación, la única forma eficiente y segura de hacerlo es desde modo kernel.

Saludos!


An expert is a man who has made all the mistakes which can be made, in a very narrow field.

while

Aham, la idea era crear una extensa base de datos de programas maliciosos, y ver su titulo para saber si esta en ejecución.
Pero hacerlo de otra forma, sería demasiado hacerlo con cada programa distinto no?
Tengo recopilados unos 70 aprox.