C/Visual C - Programa residente con Visual C++

 
Vista:

Programa residente con Visual C++

Publicado por Pedro (3 intervenciones) el 24/09/2007 08:49:58
Hola a todos,

Tengo una aplicación que se encarga de estar leyendo los datos que se mandan a un determinado puerto para posteriormente formatear esos datos y ejecutar una serie de operaciones. Necesito que esa aplicación se ejecute al iniciar el sistema y en segundo plano, es decir, que el usuario no se entere que existe. Estaba pensando que apareciese un icono en la barra de tareas, al lado del reloj, como hacen programas como los antivirus y demás.

La aplicación está hecha con Visual C++ 2005.

¿Alguien podría ayudarme?

Muchas gracias,
Pedro
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Programa residente con Visual C++

Publicado por Nelek (816 intervenciones) el 25/09/2007 08:20:32
La idea que tienes no es mala. Donde te atascas?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Programa residente con Visual C++

Publicado por Pedro (3 intervenciones) el 26/09/2007 08:43:53
Soy novato en (Visual) C++ y no sé cómo hacer que mi aplicación al arrancar se quede minimizada en la barra de tareas, con un icono al lado del reloj.

Tampoco tengo muy claro cómo hacer que se ejecute al arrancar el sistema. Había pensado en ponerlo en el menú de inicio. Suena fácil pero no sé si con eso sólo bastará.

Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Programa residente con Visual C++

Publicado por Nelek (816 intervenciones) el 26/09/2007 09:32:45
No te se decir los comandos exactos porque nunca he hecho algo asi, pero te digo cosas que me suenan posibles. Al menos tendras una orientacion.

para lo de que se arranque automaticamente se puede hacer escribiendo en el registro por la zona...

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

Para que sea un programa que no tenga ventanas pero que aun asi sea ejecutado, puedes usar los SDK de windows.

Si lo que quieres es que sea un programa con ventanas pero que se oculte...
Puedes buscar en la ayuda del visual estudio los siguientes conceptos

CWindow::ShowWindow

y darle al ShowWindow del Win32 SDK, te dara una relacion de opciones con las que se puede iniciar una aplicacion si lo pones dentro de...

/////////////////////////////////////////////////////////////////////////////
// CMyApp Inicializacion
/////////////////////////////////////////////////////////////////////////////

BOOL CMyApp::InitInstance()
{
//Codigo previo

// MDI-Marco de ventana principal
CMainFrame* pMainFrame = new CMainFrame;
if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
return FALSE;
m_pMainWnd = pMainFrame;

//Mas codigo

// La ventana principal fue inicializada y puede ser mostrada
pMainFrame->ShowWindow(m_nCmdShow); //AQUI SE USAN LOS FLAGS DE LA AYUDA, EL QUE TE INTERESA ES EL WM_HIDE
pMainFrame->UpdateWindow();

return TRUE;
}


Respecto a lo de mandar el icono al lado del reloj, creo que se hace con algo relacionado con SysTrayIcon o algo asi.

Espero que te sirva, al menos ya tienes algo por donde ir mirando. El hacerlo ya es cosa tuya.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Programa residente con Visual C++

Publicado por Pedro (3 intervenciones) el 26/09/2007 16:03:11
Muchas gracias por tu ayuda. He conseguido que cuando pulsa el botón de minimizar la ventana desparezca y aparezca un icono al lado del reloj (aunque cuando paso el ratón por encima se pierde... supongo que será alguna tontería que se me ha pasado).

Sin embargo, no consigo que la aplicación arranque ya minimizada. He probado mil cosas sin éxito.

Abajo muestro el código que le pasa el control a la ventana de diálogo. Este código da un error al llamar a ShowWindow porque no cumple las condiciones (asertos).

BOOL CDDETestApp::InitInstance()
{
AfxEnableControlContainer();

#ifdef _AFXDLL
Enable3dControls();
#else
Enable3dControlsStatic();
#endif
CDDETestDlg dlg;
m_pMainWnd = &dlg;

m_pMainWnd->ShowWindow(SW_HIDE);

int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
}
else if (nResponse == IDCANCEL)
{
}

return FALSE;
}

Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Programa residente con Visual C++

Publicado por Nelek (816 intervenciones) el 27/09/2007 15:25:27
Prueba cambiando

m_pMainWnd->ShowWindow(SW_HIDE);

con

m_pMainWnd->ShowWindow(m_nCmdShow | SW_HIDE);

Ten en cuenta que la implementacion por defecto tiene que darse, por eso hay que hacer un OR con el modo que se quiere anyadir. Pero si solo le pones el modo deseado te dara problemas.

La segunda cosa que me "mosquea" es que tu aplicacion es Dialog-Based por lo que veo. Por lo tanto, si llamas al dlg.DoModal () lo vas a tener complcado ya que el DoModal suele crear el dialogo, meterlo en primer plano y no dejarte hacer otra cosa hasta que no devuelve un valor, ya sea por OK, CANCEL o cualquier otro return.

Prueba a hacerlo con NonModalDialog, en lugar de la llamada a DoModal, lo creas y dentro del constructor del dialogo lo haces visible. Hay informacion al respecto por el foro, la web y en la ayuda del MSDN
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar