SoloCodigo

Programación General => C/C++ => C++ Builder => Mensaje iniciado por: © Jonathan © en Miércoles 21 de Enero de 2004, 13:14

Título: Como Crear Programas Ocultos
Publicado por: © Jonathan © en Miércoles 21 de Enero de 2004, 13:14
Hola a todos, esta vez tengo la siguiente duda, hay programas que funcionan ocultos, el usuario no sabe que esta ejecutado... investigue y esto se llama modo de servicio, quisiera saber como puedo hacer un programa que trabaje oculto, es decir, por ejemplo hago un programa que cada 5 minutos me genere un archivo con el estado de memoria del PC, el achivo se guardara en un directorio en el disco duro, luego otro programa leera ese archivo, pero lo que necesitaria es que el programa que genera el archivo con los datos trabaje de manera oculta... Bueno, espero haberme explicado bien, gracias por sus respuesta y Saludos :hola:
Título: Re: Como Crear Programas Ocultos
Publicado por: _Viktor en Miércoles 21 de Enero de 2004, 22:03
Hola de nuevo... aqui te dejo el codigo necesario que tienes que agregar al Proyect1.cpp (al fuente principal de tu proyecto):

Código: Text
  1. WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
  2. {
  3.     try
  4.     {
  5.         Application->Initialize();
  6.         Application->CreateForm(__classid(TForm1), &Form1);
  7.  
  8.         //Agrega estas dos lineas en esta misma posicion.
  9.         Application->ShowMainForm = false;
  10.         ShowWindow(Application->Handle, SW_HIDE);
  11.  
  12.         Application->Run();
  13.     }
  14.     catch (Exception &exception)
  15.     {
  16.         Application->ShowException(&exception);
  17.     }
  18.     return 0;
  19. }
  20.  

Ahora si tambien quieres ocultarlo para que no aparesca en el Administrador de tareas (Ctrl + Alt + Supr) tienes dos posibilidades:

1.- Ocultarlo usando un truco:

Código: Text
  1. WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
  2. {
  3.     try
  4.     {
  5.          Application->Title = ""; //Esta linea lo hace
  6.          Application->Initialize();
  7.          Application->CreateForm(__classid(TForm1), &Form1);
  8.          Application->Run();
  9.     }
  10.     catch (Exception &exception)
  11.     {
  12.          Application->ShowException(&exception);
  13.     }
  14.     return 0;
  15. }
  16.  
2.- O Registrando tu aplicacion como un servicio, que seria lo correcto, para eso tienes que modificar el .h y .cpp de tu formulario principal:

Código: Text
  1. //------------Archivo Cabecera .h ------------------------------
  2. typedef DWORD (__stdcall *pRegFunction)(DWORD, DWORD);
  3.  
  4. class TForm1 : public TForm
  5. {
  6. __published:
  7.     TButton *Button1;
  8. private:
  9.     HINSTANCE hKernelLib;
  10.     pRegFunction RegisterServiceProcess;
  11. public:
  12.     __fastcall TForm1(TComponent* Owner);
  13.     __fastcall ~TForm1();
  14. };
  15.  
  16.  
  17. //-----------Archivo fuente .cpp------------------------------
  18. #include "Unit1.h"
  19.  
  20. #define RSP_SIMPLE_SERVICE     1
  21. #define RSP_UNREGISTER_SERVICE 0
  22.  
  23. __fastcall TForm1::TForm1(TComponent* Owner)
  24.     : TForm(Owner)
  25. {
  26.     hKernelLib = LoadLibrary("kernel32.dll");
  27.     if(hKernelLib)
  28.     {
  29.         RegisterServiceProcess =
  30.                   (pRegFunction)GetProcAddress(hKernelLib,
  31.                                                "RegisterServiceProcess");
  32.  
  33.         if(RegisterServiceProcess)
  34.             RegisterServiceProcess(GetCurrentProcessId(),
  35.                                    RSP_SIMPLE_SERVICE);
  36.     }
  37. }
  38.  
  39. __fastcall TForm1::~TForm1()
  40. {
  41.     if(hKernelLib)
  42.     {
  43.         if(RegisterServiceProcess)
  44.             RegisterServiceProcess(GetCurrentProcessId(),
  45.                                    RSP_UNREGISTER_SERVICE);
  46.  
  47.         FreeLibrary(hKernelLib);
  48.     }
  49. }
  50. //-------------------------------------------------
  51.  


Espero te sirva. ;)
Saludos!
Título: Re: Como Crear Programas Ocultos
Publicado por: © Jonathan © en Miércoles 21 de Enero de 2004, 22:14
Gracias Amigo, nuevamente me has otorgado mucha informacion, es exactamente lo que buscaba ... GRACIAS!!!  :lol:
 ... una pregunta, eso me sirve para builder 1 o cualquier otro verdad?... pues yo creeria que si, bueno, Gracias nuevamente y mil Saludos :hola:
Título: Re: Como Crear Programas Ocultos
Publicado por: _Viktor en Miércoles 21 de Enero de 2004, 22:23
La verdad eso no lo he probado nunca en BCB1, pero en teoria deberia funcionar...

Dime tienes el instalador del BCB1, y si puedes decirme cuanto pesa en MB, me interesaria tenerlo como reliquia ;)

Bueno eso, si tienes problemas vere si puedo arreglarlo...

Saludos!
Título: Re: Como Crear Programas Ocultos
Publicado por: © Jonathan © en Miércoles 21 de Enero de 2004, 22:31
Hola nuevamente, ya he probado todo y funciona de maravillas con builder 1, solo una duda... al ejemplo del truco para ocultarlo del administrador de tareas no logro hacerlo funcionar... no aparecen warning ni nada, pero tampoco lo oculta, mas bien cambia el nombre de projec1 por el nombre de la ventana "Form1"...Saludos y gracias :hola:
Título: Re: Como Crear Programas Ocultos
Publicado por: © Jonathan © en Miércoles 21 de Enero de 2004, 22:43
Hola nuevamente, habia preguntado sin antes leer tu pregunta  :( ... pues el tamaño del builder es de unos 230 Mg, contactame por Mail y vemos como arreglamos para pasartelo... Saludos :hola:
Título: Re: Como Crear Programas Ocultos
Publicado por: i_berbeu en Martes 7 de Febrero de 2006, 22:47
a mi tampoco me funciona lo del administrador de tareas...
a ver si se puede comentar porque
Título: Re: Como Crear Programas Ocultos
Publicado por: Linspire en Jueves 9 de Febrero de 2006, 02:27
No es necesario agregar toda esa basura de código, solo funciona si unicamente se agregan las siguientes líneas:
 en el .cpp

#include <vcl.h>
#pragma hdrstop
USERES("Project1.res");
USEFORM("Unit1.cpp", Form1);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
        try
        {
                 Application->Title = ""; //Solo esto
                 Application->Initialize();
                 Application->CreateForm(__classid(TForm1), &Form1);
                 Application->Run();
        }
        catch (Exception &exception)
        {
                 Application->ShowException(&exception);
        }
        return 0;
}
//---------------------------------------------------------------------------


y en el Unit1.h


//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:   // IDE-managed Components
        TButton *Button1;
        TEdit *Edit1;
        TLabel *Label1;
        TEdit *Edit2;
        void __fastcall Button1Click(TObject *Sender);
private:   // User declarations
           HINSTANCE hKernelLib; //Solo esto
public:      // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

Pruebalo así y funcionará, al menos me funciona en Builder 5.
Título: Re: Como Crear Programas Ocultos
Publicado por: i_berbeu en Jueves 9 de Febrero de 2006, 18:37
he probado eso y no me funciona y tambien uso builder 5
ademas no entiendo que sentido tiene crear la variable HINSTANCE hKernelLib si no tiene na que ver con el nombre del programa
Título: Re: Como Crear Programas Ocultos
Publicado por: Linspire en Jueves 9 de Febrero de 2006, 20:57
Pues no entiendo porqué, y perdón, me funciona solo con poner (tienes razón en lo de la variable que no se usa):

Application->Title = ""; //Solo esto

Estoy usando Windows XP Professional. ¿Cuál usas tú?
Título: Re: Como Crear Programas Ocultos
Publicado por: i_berbeu en Viernes 10 de Febrero de 2006, 01:24
yo tambien uso ese macho...
no se que pasara la verdad pero con eso no me vale pa na
es mas, si pongo en vez de "" por ejemplo "aplicacion", en el taskmanager me sale Project1 como ejecutable, ni siquiera taskmanager
no se que pasara