Ayuda con programita en C

LOc0

Hola. Veréis, me voy unos días al pueblo y queria dejar esto bajando. El caso es que no voy a tener acceso a inet, y No me gustaría que a las dos horas de haberme pirado se cerrara el eMule (como aveces pasa) y a tomar por saco... Me gustaría escribir un pequño programa en C para controlar que eMule.exe está en proceso, y de no ser así, que reinicara la máquina (o lo ejecutara). La parte q NO SÉ es la de comprobar si ta cargado. ¿Sabéis de alguna función que haga eso? (es urgente, porque me voy mañana)

Salu2 y gracias ;)

B

no lo se, peor también me gustaría saber como se haría, Loco, hazme un favor si consigues saber como se hace, me podrias pasar todo el codigo del programa? esque estoy aprendiendo C y me gustaria ver como se hace?
Si eso me mandas el codigo por msj de mv o a un email a [email protected] por favor :]

r2d2rigo

Busca en Google el funcionamiento de la API Kernel32. Con eso consegui ocultar un programa para que solo saliese como proceso. Letal para W95 y W98 ^^

IDEA: En opciones del eMule, pon que solo admita una ventana abierta al tiempo. Luego haces un programa que cada x segundos ejecute el archivo eMule.exe; si esta abierto, no pasara nada, y si esta cerrado lo abrira.

LOc0

[ESTE METODO COMPRUEBA QUE SE ACTUALICE ONLINESIG.DAT en menos de 2 minutos para ver si emule.exe etá en ejecución]

Bueno, pos aunque la idea de rodrigo fue lo primero que me vino en mente, tb taba el caso de que se colgara dando error y saliendo la ventanita esa para aceptar (emule colgado PERO EL PROCESO sigue).

Para evitar eso, he tenido que echar mano de un programita externo de las pstools (pskill.exe) que termina procesos a lo "bestia".

Venga, no me enrollo más, aqui ta el código:

#include <stdio.h>

int copiador(char[], char[]);
int comparador(char[], char[]);

void main()
{
int bucle;
int bandera;


while(0==0)
{
    system("cls");
    printf("\n\n\tCOPIANDO *onlinesig.dat* a --> *firma.dat* Por favor, espere...");
    copiador("onlinesig.dat", "firma.dat");
    
    
    sleep(1000);
    
    bandera=1; //Se supone que serán iguales
    
    for(bucle=0; bucle<120 && bandera==1; bucle++)
    {       
            system("cls"); 
            printf("\n\n\t*firma.dat* creado correctamente");
            printf("\n\n\tComparando ONLINESIG.DAT y FIRMA.DAT. %d seg restantes", 120-bucle);
            if(comparador("onlinesig.dat", "firma.dat")==1)
            printf("\n\n\tPor el momento son iguales...");
            else
                            bandera=0;
            
            sleep(1000);
            
    }
        
      system("cls");  
      printf ("\n*Onlinesig.dat* y *firma.dat son* %s ", bandera==1 ? "iguales" : "distintos");
      
       



    if(bandera==1)
            {system("pskill emule");
             printf("\n\n\n\n\tEmule se ha colgado. Ejecutando emule de nuevo...");
             system("start emule.exe");
             printf("\n\n\tEmule CARGADO con éxito. Dentro de media hora se volverá a comprobar...");
            }
    else
            printf("\n\n\tEmule FUNCIONA PERFECTAMENTE. Dentro de media hora se volverá a comprobar...");
             
     sleep(1800000);
    }

}

int copiador(char original[], char copia[])
{
int marca=-1;
FILE *pf1, pf2; / punteros a fichero de entrada y fichero de
salida resp. */


  if ((pf1 = fopen (original, "rb")) == NULL)
    marca=-1;
  else if ((pf2 = fopen (copia, "wb")) == NULL)
    {
      marca=-1;
      fclose (pf1);
    }
  else
    {
      int ch1, ch2;

      while(!feof(pf1)) 
                { 
                ch1=fgetc(pf1); 
                if(!feof(pf1)) 
                fputc(ch1, pf2); 

                } 
      fclose (pf1);
      fclose (pf2);
      marca=1;
    }

  return(marca);

}

int comparador(char nombre_fichero_1[], char nombre_fichero_2[])
{
int marca;


FILE *pf1, pf2; / punteros a fichero de entrada y fichero de
salida resp. */


  if ((pf1 = fopen (nombre_fichero_1, "rb")) == NULL)
    marca=-1;
  else if ((pf2 = fopen (nombre_fichero_2, "rb")) == NULL)
    {
      marca=-1;
      fclose (pf1);
    }
  else
    {
      int ch1, ch2;

      while ((ch1 = fgetc (pf1)) == (ch2 = fgetc (pf2)) && ch1
            != EOF) ;
               
               if(feof(pf1) && feof (pf2))
                                  marca=1;
               else
                                  marca=0;
      fclose (pf1);
      fclose (pf2);
    }

  return(marca);

}

Salu2 ;)

r2d2rigo

Wow, eres el amo ^^

Eso si, un pequeño detalle: si utilizas un bucle infinito del tipo while(0==0) quiza te de algun problema al cerrar el programa a la fuerza bruta. Cambialo por un scanf que detecte si se ha pulsado la tecla esc.

LOc0

Sip, el amo...

... de los capullos :D

A ver, hace un ratillo me vino un brote de iluminación y me di cuenta de que cuando salta la ventana esa de error que dice: patatin.exe ha generado errores será cerrado por windows. Debe reiniciar el programa. Se creará un registro de error + Botón de ACEPTAR, se carga un proceso --> "DRWTSN32 "

Pues bien, sin más preámbulos, aqui va el código resumido:

[MÉTODO QUE NO REQUIERE ACTIVAR LA ONLINE SIGNATURE]
#include <stdio.h>

void main()
{

while(0==0)
{
    int conta;
    
    system("cls");
    printf("\n\n\tFinalizando DRWTSN32...");
    system("pskill DRWTSN32");
    system("cls");
    printf("\n\n\tCargando emule.exe");
    system("start emule.exe");
    
 
         for(conta=0; conta<3600; conta++)
         {    
                      system("cls");
                      printf("\n\n\tSe volverá a comprobar en %d seg", 3600-conta);
                      sleep(1000);
         }   

}

}

Salu2

PD: No entiendo bien lo del scanf. ¿Scanf no paraliza la ejecución hasta que introduces algo y le das ENTER?
}


}

PD2: Esto al menos pasa en win2k. No sé si en XP se activará DRWTS32 en los errores esos... Sería interesante que si alguien lo sabe que lo diga...

r2d2rigo

En XP se activan 2 procesos, pero ahora no me acuerdo cuales eran... uno de ellos era dumprep.exe

En cuanto a lo del scanf, no me acuerdo si era con eso o con el getc, pero habia un modo para ejecutar el programa hasta que se pulsase determinada tecla... Voy a ver si lo encuentro :P

7 días después
LOc0

Bueno, ayer volvi del pueblo. AQUI ta la última versión.

www.elcopias.com/vigilamula5.zip por si lo queréis...

Salu2 ;)

Usuarios habituales