Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: luchi en 18 Febrero 2015, 23:18 pm



Título: [Solucionado]Orientación para crear un programa de escritorio
Publicado por: luchi en 18 Febrero 2015, 23:18 pm
Hola.
Me gustaría crear un programa de escritorio, un programa sencillo en el que cada hora te alerte algo. El problema es que vengo de programación web y no sé por dónde empezar. El programa sería para win 7 y o Vista. Tengo nociones de Java, aunque no me asusta empezar a aprender otro lenguaje.


Título: Re: Orientación para crear un programa de escritorio
Publicado por: Eleкtro en 19 Febrero 2015, 00:57 am
Hola.
Me gustaría crear un programa de escritorio, un programa sencillo en el que cada hora te alerte algo. El problema es que vengo de programación web y no sé por dónde empezar. El programa sería para win 7 y o Vista. Tengo nociones de Java, aunque no me asusta empezar a aprender otro lenguaje.

¿Por cada hora te refieres a cada intervalo de 60 minutos, o cada hora del reloj interno del SO?, ¿y por "alerta", te refieres a mostrar una caja de texto, o ventanas de notificación en la esquina de la pantalla?.

Sea como sea, en cualquier lenguaje te resultará más o menos sencillo de hacer, los lenguajes de programación suelen tener miembros para el manejo de datos como Fechas y Horas, y miembros para medir intervalos de tiempo y/o utilizar temporizadores (en el caso de que quieras eso).

Practicamente no se casi nada de Java, pero puedo mostrárte un ejemplo en Vb.Net (cuya traducción sería practicamente igual en C#, con pequeñas diferencias de sintaxis):

Esto es un ejemplo que espera 60 minutos de forma asíncrona (es decir, detiene la ejecución del hilo secundario durante 60 minutos) y muestra un mensaje de alerta:

Código
  1. Imports System.Threading
  2. Imports System.Threading.Tasks
  3.  
  4. Public NotInheritable Class TestForm : Inherits Form
  5.  
  6.    ''' <summary>
  7.    ''' Handles the Load event of the TestForm control.
  8.    ''' </summary>
  9.    ''' <param name="sender">The source of the event.</param>
  10.    ''' <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
  11.    Private Sub TestForm_Load(ByVal sender As Object, ByVal e As EventArgs) _
  12.    Handles MyBase.Load
  13.  
  14.        Me.RunAlertAsync(60 * 1000, "Mensaje de alerta")
  15.  
  16.    End Sub
  17.  
  18.    ''' <summary>
  19.    ''' Waits asynchronouslly the specified time interval then shows an alert.
  20.    ''' </summary>
  21.    ''' <param name="interval">The interval, in ms.</param>
  22.    ''' <param name="alertText">The alert text.</param>
  23.    Public Sub RunAlertAsync(ByVal interval As Integer,
  24.                             ByVal alertText As String)
  25.  
  26.        Task.Factory.StartNew(Sub()
  27.                                  Thread.Sleep(interval)
  28.                                  Me.ShowAlert(alertText)
  29.                              End Sub)
  30.  
  31.    End Sub
  32.  
  33.    ''' <summary>
  34.    ''' Shows an alert.
  35.    ''' </summary>
  36.    ''' <param name="text">The alert text.</param>
  37.    Private Sub ShowAlert(ByVal text As String)
  38.  
  39.        MessageBox.Show(text, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
  40.  
  41.    End Sub
  42.  
  43. End Class

Y esto es un ejemplo que muestra alertas cada hora en punto del reloj interno del SO:
Código
  1. Public NotInheritable Class TestForm : Inherits Form
  2.  
  3.    ''' <summary>
  4.    ''' The timer that will notify an alert.
  5.    ''' </summary>
  6.    Protected WithEvents notifyTimer As New Timer With
  7.        {
  8.            .Interval = 250,
  9.            .Enabled = False
  10.        }
  11.  
  12.    ''' <summary>
  13.    ''' Gets the alert text.
  14.    ''' </summary>
  15.    ''' <value>The alert text.</value>
  16.    Private ReadOnly Property AlertText As String
  17.        Get
  18.            Return "Mensaje de alerta"
  19.        End Get
  20.    End Property
  21.  
  22.    ''' <summary>
  23.    ''' Initializes a new instance of the <see cref="TestForm"/> class.
  24.    ''' </summary>
  25.    Public Sub New()
  26.        Me.InitializeComponent()
  27.        Me.InitializeTimer()
  28.    End Sub
  29.  
  30.    ''' <summary>
  31.    ''' Initializes the <see cref="notifyTimer"/>.
  32.    ''' </summary>
  33.    Private Sub InitializeTimer()
  34.        Me.notifyTimer.Enabled = True ' Inicio el temporizador.
  35.    End Sub
  36.  
  37.    ''' <summary>
  38.    ''' Shows an alert.
  39.    ''' </summary>
  40.    ''' <param name="value">The value.</param>
  41.    Private Sub ShowAlert(ByVal value As String)
  42.        MessageBox.Show(value, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
  43.    End Sub
  44.  
  45.    ''' <summary>
  46.    ''' Handles the Tick event of the Timer1 control.
  47.    ''' </summary>
  48.    ''' <param name="sender">The source of the event.</param>
  49.    ''' <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
  50.    Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As EventArgs) _
  51.    Handles notifyTimer.Tick
  52.  
  53.        ' Si el minuto actual es '0', entonces...
  54.        If DateTime.Now.Minute = 0 Then
  55.            DirectCast(sender, Timer).Stop() ' Detengo el temporizador.
  56.            Me.ShowAlert(Me.AlertText) ' Muestro la alerta.
  57.        End If
  58.  
  59.    End Sub
  60.  
  61. End Class

PD: Te los he documentado para que los entiendas mejor.

Saludos.


Título: Re: Orientación para crear un programa de escritorio
Publicado por: luchi en 19 Febrero 2015, 01:14 am
Me refería a un intervalo cada de 60 minutos. Pues gracias por el código pero ahora ¿cómo lo hago para ejecutarlo en el ordenador?


Título: Re: Orientación para crear un programa de escritorio
Publicado por: Eleкtro en 19 Febrero 2015, 01:21 am
Me refería a un intervalo cada de 60 minutos. Pues gracias por el código pero ahora ¿cómo lo hago para ejecutarlo en el ordenador?

Necesitas compilar el código fuente para construir el archivo binario ejecutable, claro está, jeje.

Puedes descargar la versión Express de Microsoft VisualStudio aquí:
  • http://go.microsoft.com/?linkid=9832256

O puedes descargar mi instalador personalizado de la versión Ultimate, orientada a VB.Net, con un sin fin de addons para empezar a desarrollar con todo lo necesario y más, aquí:
  • Microsoft Visual Studio 2013 Ultimate + Resource Pack (Actualizado 09-Oct-2014) (http://foro.elhacker.net/series_peliculas_musica_juegos_programas/microsoft_visual_studio_2013_ultimate_resource_pack_actualizado_09oct2014-t422732.0.html)

Una vez hayas instalado VisualStudio, creas un nuevo proyecto de tipo WindowsForms bajo el lenguaje VB.Net, pegas el código fuente que mostré ( corrijes el nombre de la Class 'TestForm' por 'Form1' ) y entonces ya puedes empezar a adaptar el código a tus necesidades y formular las consiguientes dudas que tengas al respecto, en el subforo de la sección dedicada a la programación .Net :).

Saludos


Título: Re: [Solucionado]Orientación para crear un programa de escritorio
Publicado por: luchi en 19 Febrero 2015, 01:27 am
Muchas gracias. Ya me queda más claro  ;D