Explicamos en este artículo paso a paso y con comentarios y capturas de pantalla cómo insertar un evento o cita en el calendario de Google Calendar, usando para ello el IDE y lenguaje de programación Microsoft Visual Studio .Net (Visual Basic .Net) 2010. Para poder insertar o añadir una cita en un calendario de Google Calendar será necesario usar el API de Google, también explicamos cómo descargarlo y cómo usarlo. Mostramos y publicamos la aplicación AjpdSoft Insertar Evento Google Calendar con código fuente gratuito como ejemplo de este artículo: inserta un evento, muestra los eventos de todos los calendarios de un intervalo de fechas, muestra todos los calendarios.
- Descargar e instalar Google Data API SDK.
- Crear aplicación con Visual Basic .Net 2010 que inserta un evento en Google Calendar usando Google Data API.
- Crear nuevo proyecto en Visual Studio 2010, agregar referencia a Google Data API SDK .
- Componentes necesarios para insertar cita en Google Calendar y para mostrar las citas de una fecha.
- El código fuente source code más importante, validar en Google, insertar evento Google Calendar, obtener calendarios y citas, insertar calendario.
- AjpdSoft Insertar Evento Google Calendar.
- Anexo.
- Artículos relacionados.
- Créditos.
Descargar e instalar Google Data API SDK
Para instalar Google Data API en un equipo con Microsoft Windows 7 abriremos un navegador web como Mozilla Firefox y accederemos a la URL:
http://code.google.com/p/google-gdata/downloads/list
Seleccionaremos Google Data API Setup (1.7.0.1).msi (21 MB):
Pulsaremos en el enlace Google Data API Setup (1.7.0.1).msi para iniciar la descarga:
Una vez descargado el fichero "Google Data API Setup (1.7.0.1).msi" haremos doble clic sobre él para iniciar la instalación:
Microsoft Windows 7 nos advertirá de que se va a ejecutar un archivo potencialmente peligroso (por tratarse de una descarga de Internet). Pulsaremos "Ejecutar" para continuar:
Se iniciará el asistente de instalación de Google Data API SDK, pulsaremos "Next" para continuar:
Indicaremos la carpeta de instalación, por defecto:
C:/Program Files (x86)/Google/Google Data API SDK
Pulsaermos "Next" par acontinuar:
Tras la instalación de Google Data API SDK, el asistente nos informará de que el proceso de instalación ha concluido, con el texto "Google Data API SDK has been successfully installed". Pulsaremos "Close":
En realidad, el programa de instalación de Google Data API SDK extrae varios ficheros y carpetas. Los importantes son las librerías (dll) que serán usadas por nuestra aplicación para el acceso a los servicios de Google Calendar, se encuentran en la carpeta "redist":
Crear aplicación con Visual Basic .Net 2010 que inserta un evento en Google Calendar usando Google Data API
Crear nuevo proyecto en Visual Studio 2010, agregar referencia a Google Data API SDK
Una vez instalado Google Data API SDK e instalado Microsoft Visual Studio .Net 2010, abriremos Microsoft Visual Studio y pulsaremos en el menú "Archivo" - "Nuevo proyecto...":
Seleccionaremos, en la parte izquierda, en "Plantillas instaladas" la opción "Visual Basic" y en la parte derecha seleccionaremos "Aplicación de Windows Forms". Elegiremos .NET Framework 3.5, hay que tener en cuenta que el API actual de Google, en su versión 1.7.0.1, no soporta Framework 4.0, por lo que para el correcto funcionamiento seleccionaremos .NET Framework 3.5. En "Nombre" introduciremos el nombre de la solución, por ejemplo "AjpdSoftInsertarEventoGoogleCalendar". Pulsaremos "Aceptar" para continuar:
En el Explorador de soluciones , en la parte derecha, pulsaremos con el botón derecho sobre nuestra Solución y seleccionaremos "Agregar referencia...":
En la pestaña "Examinar", accederemos a la carpeta de instalación de Google Data API SDK, a la subcarpeta "Redist", seleccionaremos las tres librerías necesarias de Google: Google.GData.Calendar.dll, Google.GData.Client.dll y Google.GData.Extensions.dll:
Pulsaremos a continuación en el menú "Ver" - "Código" (o la tecla rápida F7) y añadiremos los siguientes Imports (si no han sido añadidos automáticamente al agregar las referencias):
Imports Google.GData.Calendar
Imports Google.GData.Client
Imports Google.GData.Extensions
Componentes necesarios para insertar cita en Google Calendar y para mostrar las citas de una fecha
En el formulario principal de la aplicación, en nuestro caso "formEnviarCitaCalendar.vb" añadiremos los siguientes componentes (podremos añadir los que queramos y como queramos, en la imagen mostramos un ejemplo):
A continuación indicamos los componentes más importantes:
- TextBox (txtUsuario): nombre de usuario de Google con el que iniciaremos sesión.
- TextBox (txtContrasena): contraseña del usuario de Google con el que iniciaremos sesión.
- TabControl (Tab): donde colocaremos los componentes para insertar la cita en una pestaña y en otra pestaña los componentes para mostrar las citas (consulta).
- En el TabControl para insertar la cita introduciremos los siguientes componentes:
- ComboBox (lsCalendarios): donde obtendremos la lista de los calendarios del usuario que ha iniciado sesión en Google Calendar, para que seleccione en el que se insertará el evento.
- DateTimePiker (txtDesdeDia): fecha desde la que empezará la cita o evento de Google Calendar.
- MaskedTextBox (txtDesdeHora): hora desde la que empezará la cita o evento de Google Calendar.
- DateTimePiker (txtHastaDia): fecha en la que finalizará la cita o evento de Google Calendar.
- MaskedTextBox (txtHastaHora): hora en la que acabará la cita o evento de Google Calendar.
- TextBox (txtEvento): asunto del evento de Google Calendar.
- TextBox (txtLugar): lugar donde se producirá la cita o evento de Google Calendar.
- TextBox (txtDescripcion): descripción de la cita de Google Calendar.
- ComboBox (lsRecordatorio): lista con el tipo de recordatorio (SMS, Correo electrónico, Ventana emergente).
- TextBox (txtInvitados): posibles invitados al evento o cita de Google Calendar.
- Button (btValidar): botón para probar el usuario y la contraseña, para validar en cuenta de google.
- Button (btListaCalendarios): botón para obtener y mostrar los calendarios del usuario de Google Calendar.
- Button (btEnviar): botón para enviar el evento o cita a Google Calendar.
- Button (btSalir): botón para salir y guardar los datos actuales en fichero INI.
- En el TabControl para mostrar las citas usaremos los siguientes componentes:
- ComboBox (lsCalendariosCitas): donde obtendremos la lista de los calendarios del usuario que ha iniciado sesión en Google Calendar, para que seleccione el calendario del que se obtendrán los eventos/citas.
- DateTimePiker (txtCitasDesde): fecha desde la que mostraremos las citas de Google Calendar.
- DateTimePiker (txtCitasHasta): fecha hasta la que mostraremos las citas de Google Calendar.
- NumericUpDown (txtNumeroMaximoCitas): para limitar el número máximo de eventos a obtener.
- ListView (lsCitas): campo donde mostraremos las citas de Google Calendar del período elegido.
- Button (btObtenerCitas): botón para obtener las citas del período elegido de Google Calendar.
- Button (btExportarCSV): botón para exportar las citas/eventos a fichero CSV separado por comas.
- En el TabControl para insertar la cita introduciremos los siguientes componentes:
- En el TabControl para mostrar los calendarios usaremos los siguientes componentes:
- Button (btObtenerCalendariosLista): botón para obtener todos los calendarios del usuario.
- CheckBox (opSoloPropietarioListaCalendarios): check para mostrar todos los calendarios del usuario o sólo los calendarios de los que sea propietario.
- ListView (lsListaCalendarios): lista para mostrar todos los calendarios.
- Otros componentes para añadir un nuevo calendario (TextBox, Button, CheckBox).
El código fuente source code más importante, validar en Google, insertar evento Google Calendar, obtener calendarios y citas, insertar calendario
A continuación mostramos los procedimientos y funciones más importantes de AjpdSoft Insertar Evento Google Calendar.
En primer lugar, para validar un usuario y contraseña de Google usaremos el siguiente código (correspondiente al botón "Probar validación" del formulario de la aplicación):
Private Sub btValidar_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles btValidar.Click
Try
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
bePanel1.Text = "Validando credenciales en Google..."
be.Refresh()
'Autenticación en Google con usuario y contraseña
Dim servicioGoogle As New CalendarService("AjpdSoftCitaGoogleCalendar")
Dim token As String
servicioGoogle.setUserCredentials(txtUsuario.Text, txtContrasena.Text)
token = servicioGoogle.QueryClientLoginToken()
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
MsgBox("Validación realizada correctamente con la " & _
"cuenta de Google indicada." & _
vbCrLf & vbCrLf + "Token: " & vbCrLf & token,
MsgBoxStyle.Information + MsgBoxStyle.OkOnly)
Catch ex As Exception
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
MsgBox("Se ha producido un error al intentar validar el usuario " &
"y la contraseña en Google: " & _
vbCrLf & vbCrLf & ex.Message,
MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation)
End Try
End Sub Para mostrar una lista de todos los calendarios dados de alta por el usuario de Google Calendar (correspondiente al botón "Calendarios" del formulario de la aplicación): Private Sub btListaCalendarios_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles btListaCalendarios.Click
Dim titulo As String = ""
Dim subtitulo As String = ""
Try
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
bePanel1.Text = "Obteniendo lista de calendarios de Google Calendar..."
be.Refresh()
lsCalendarios.Items.Clear()
obtenerCalendarios(opSoloPropietario.Checked)
Dim i As Integer
For i = 0 To calendariosT.Count - 1
lsCalendarios.Items.Add(calendariosT.Item(i).titulo)
Next i
If calendariosT.Count > 0 Then
lsCalendarios.SelectedIndex = 0
End If
bePanel1.Text = "Lista de calendarios obtenida correctamente"
be.Refresh()
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
Catch ex As Exception
bePanel1.Text = "Error al obtener lista de calendarios..."
be.Refresh()
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
MsgBox("Se ha producido un error al intentar obtener la " & _
"lista de calendarios de Google Calendar: " & _
vbCrLf & vbCrLf & ex.Message,
MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation)
End Try
End Sub El botón anterior usa el procedimiento "obtenerClanedarios" que mostramos a continuación: 'Obtiene los calendarios del usuario de Google Calendar
Private Sub obtenerCalendarios(ByVal propietario As Boolean)
Try
'Alta del servicio de Google y autenticación en Google
Dim servicioGoogle As New CalendarService("AjpdSoftInsertarCitaGoogleCalendar")
servicioGoogle.setUserCredentials(txtUsuario.Text, txtContrasena.Text)
Dim consultaCalendar As CalendarQuery = New CalendarQuery()
If propietario Then
consultaCalendar.Uri =
New Uri("https://www.google.com/calendar/feeds/default/owncalendars/full")
Else
consultaCalendar.Uri =
New Uri("https://www.google.com/calendar/feeds/default/allcalendars/full")
End If
Dim resultadoFeed As CalendarFeed = servicioGoogle.Query(consultaCalendar)
calendariosT.Clear()
Dim creadoresCalendario As String
Dim i As Integer
For Each entradaActual As CalendarEntry In resultadoFeed.Entries
Dim calendarios As New calendariosGoogleCalendar
calendarios.titulo = entradaActual.Title.Text
calendarios.uri = entradaActual.Id.AbsoluteUri.Substring(63)
calendarios.descripcion = entradaActual.Summary.Text
calendarios.soloLectura = resultadoFeed.ReadOnly
creadoresCalendario = ""
For i = 0 To resultadoFeed.Authors.Count - 1
If creadoresCalendario <> "" Then
creadoresCalendario = creadoresCalendario & ", " & resultadoFeed.Authors.Item(i).Email
Else
creadoresCalendario = resultadoFeed.Authors.Item(i).Email
End If
Next
calendarios.creadores = creadoresCalendario
calendariosT.Add(calendarios)
Next
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation)
End Try
End Sub El código fuente source code VB.Net para insertar un evento o cita en Google Calendar (botón "Enviar evento"):
Private Sub btEnviar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btEnviar.Click
If lsCalendarios.Text = "" Then
MsgBox("Debe especificiar el calendario en el que se insertará el evento.",
MsgBoxStyle.Information + MsgBoxStyle.OkOnly)
lsCalendarios.Focus()
Else
Try
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
bePanel1.Text = "Enviando evento a Google Calendar..."
be.Refresh()
'Alta del servicio de Google y autenticación en Google
Dim servicioGoogle As New CalendarService("AjpdSoftInsertarCitaGoogleCalendar")
servicioGoogle.setUserCredentials(txtUsuario.Text, txtContrasena.Text)
Dim entradaCalendario As New EventEntry
'Asunto (título) del evento Google Calendar
entradaCalendario.Title.Text = txtEvento.Text
'Descripción del evento Google Calendar
entradaCalendario.Content.Content = txtDescripcion.Text
'Lugar del evento Google Calendar
Dim ubicacionEvento = New Where()
ubicacionEvento.ValueString = txtLugar.Text
entradaCalendario.Locations.Add(ubicacionEvento)
'Fecha y hora inicio del evento, fecha y hora fin del evento Google Calendar
Dim fechaInicioTxt As String = txtDesdeDia.Text & " " & txtDesdeHora.Text
Dim fechaInicio As Date =
Date.Parse(fechaInicioTxt, System.Globalization.CultureInfo.CurrentCulture)
Dim fechaFinTxt As String = txtHastaDia.Text & " " & txtHastaHora.Text
Dim fechaFin As Date =
Date.Parse(fechaFinTxt, System.Globalization.CultureInfo.CurrentCulture)
Dim desdeHastaCalendar As New [When](fechaInicio, fechaFin)
entradaCalendario.Times.Add(desdeHastaCalendar)
'** INICIO Activar tipo de Recordatorio
Dim Recordatorio As New Reminder
'Unidad de tiempo (horas, minutos, días)
If lsRecordatorioUnidadTiempo.Text = "minutos" Then
Recordatorio.Minutes = CInt(txtRecordatorioTiempo.Text)
End If
If lsRecordatorioUnidadTiempo.Text = "horas" Then
Recordatorio.Hours = CInt(txtRecordatorioTiempo.Text)
End If
If lsRecordatorioUnidadTiempo.Text = "días" Then
Recordatorio.Days = CInt(txtRecordatorioTiempo.Text)
End If
'tipo de recordatorio (SMS, correo electrónico, ventana emergente)
If lsRecordatorio.Text = "SMS" Then
Recordatorio.Method = Reminder.ReminderMethod.sms
End If
If lsRecordatorio.Text = "Correo electrónico" Then
Recordatorio.Method = Reminder.ReminderMethod.email
End If
If lsRecordatorio.Text = "Ventana emergente" Then
Recordatorio.Method = Reminder.ReminderMethod.alert
End If
entradaCalendario.Reminders.Add(Recordatorio)
'** FIN Activar tipo de Recordatorio
'Inserta los invitados de la cita de Google Calendar
If txtInvitados.Text <> "" Then
Dim invintadosSeparados() As String
Dim i As Integer
invintadosSeparados = Split(txtInvitados.Text, ",")
Dim invitado As Who
For i = 0 To UBound(invintadosSeparados)
invitado = New Who()
invitado.Rel = Who.RelType.MESSAGE_TO
invitado.Email = invintadosSeparados(i)
entradaCalendario.Participants.Add(invitado)
Next i
End If
'Insertamos el evento creado en Google Calendar
Dim uriDireccionGoogle As New Uri("https://www.google.com/calendar/feeds/" &
calendariosT.Item(lsCalendarios.SelectedIndex).uri & "/private/full")
Dim entradaEventoInsertar As AtomEntry =
servicioGoogle.Insert(uriDireccionGoogle, entradaCalendario)
MsgBox("Evento enviado correctamente a Google Calendar.",
MsgBoxStyle.OkOnly + MsgBoxStyle.Information)
bePanel1.Text = "Evento enviado correctamente a Google Calendar"
be.Refresh()
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
Catch ex As Exception
bePanel1.Text = "Error al enviar evento a Google Calendar..."
be.Refresh()
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
MsgBox("Se ha producido un error al intentar insertar un " & _
"evento en Google Calendar: " & _
vbCrLf & vbCrLf & ex.Message,
MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation)
End Try
End If
End Sub El código fuente source code VB.Net para obtener las citas o eventos de Google Calendar (botón "Obtener citas") :
Private Sub btObtenerCitas_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btObtenerCitas.Click
If lsCalendariosCitas.Text = "" Then
MsgBox("Debe especificiar el calendario del que se obtendrán los eventos/citas.",
MsgBoxStyle.Information + MsgBoxStyle.OkOnly)
lsCalendariosCitas.Focus()
Else
Dim i As Integer
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
bePanel1.Text = "Obteniendo eventos/citas de Google Calendar..."
be.Refresh()
Try
lsCitas.BeginUpdate()
lsCitas.Columns.Clear()
lsCitas.Items.Clear()
lsCitas.View = View.Details
lsCitas.Columns.Add(New ColHeader("Fecha inicio", 120, HorizontalAlignment.Left, True))
lsCitas.Columns.Add(New ColHeader("Fecha fin", 120, HorizontalAlignment.Left, True))
lsCitas.Columns.Add(New ColHeader("Asunto", 200, HorizontalAlignment.Left, True))
lsCitas.Columns.Add(New ColHeader("Lugar", 100, HorizontalAlignment.Left, True))
lsCitas.Columns.Add(New ColHeader("Descripción", 200, HorizontalAlignment.Left, True))
lsCitas.Columns.Add(New ColHeader("Participantes", 100, HorizontalAlignment.Left, True))
obtenerCitasGoogleCalendar(calendariosT.Item(lsCalendariosCitas.SelectedIndex).uri, txtNumeroMaximoCitas.Value)
For i = 0 To citasT.Count - 1
Dim elementoLista As New ListViewItem
elementoLista = New ListViewItem(CStr(citasT.Item(i).fechaInicio))
elementoLista.SubItems.Add(CStr(citasT.Item(i).fechaFin))
elementoLista.SubItems.Add(citasT.Item(i).titulo)
elementoLista.SubItems.Add(citasT.Item(i).lugar)
elementoLista.SubItems.Add(citasT.Item(i).contenido)
elementoLista.SubItems.Add(citasT.Item(i).participantes)
lsCitas.Items.Add(elementoLista)
lInfoNumCitas.Text = "Obteniendo evento/cita: " & CStr(i + 1)
lInfoNumCitas.Refresh()
Next i
lsCitas.EndUpdate()
lInfoNumCitas.Text = "Número de citas/eventos: " & CStr(citasT.Count)
lInfoNumCitas.Refresh()
bePanel1.Text = "Obtenidas " & CStr(citasT.Count) & " citas"
be.Refresh()
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
Catch ex As Exception
bePanel1.Text = "Error al consultar citas/eventos de Google Calendar."
be.Refresh()
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
MsgBox("Se ha producido un error al intentar obtener eventos de Google Calendar: " & _
vbCrLf & vbCrLf & ex.Message,
MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation)
End Try
End If
End El botón anterior usa el procedimiento obtenerCitasGoogleCalendar para obtener las citas en un array de structure, el procedimiento obtenerCitasGoogleCalendar: 'Obtiene las citas (eventos) del calendario indicado según el filtro indicado
Private Sub obtenerCitasGoogleCalendar(ByVal calendario As String, ByVal numeroMaximoCitas As Integer)
Dim lugarCita As String
Dim participantesCita As String
Dim i As Integer
Try
Dim servicioGoogle As Google.GData.Calendar.CalendarService =
New Google.GData.Calendar.CalendarService("AjpdSoftInsertarCitaGoogleCalendar")
servicioGoogle.setUserCredentials(txtUsuario.Text, txtContrasena.Text)
Dim consultaCalendar As Google.GData.Calendar.EventQuery =
New Google.GData.Calendar.EventQuery()
' consultaCalendar.Uri = New Uri("http://www.google.com/calendar/feeds/" +
' servicioGoogle.Credentials.Username +
' "/private/full?max-results=1000")
'Insertamos el evento creado en Google Calendar
consultaCalendar.Uri = New Uri("https://www.google.com/calendar/feeds/" &
calendario &
"/private/full?max-results=" & CStr(numeroMaximoCitas))
consultaCalendar.StartTime = txtCitasDesde.Value
consultaCalendar.EndTime = txtCitasHasta.Value
Dim entradaFeed As Google.GData.Calendar.EventEntry
Dim calendarioFeed As Google.GData.Calendar.EventFeed = servicioGoogle.Query(consultaCalendar)
citasT.Clear()
For Each entradaFeed In calendarioFeed.Entries
Dim fechaEvento As New [When](entradaFeed.Times(0).StartTime, entradaFeed.Times(0).EndTime)
Dim citasGoogle As New citasGoogleCalendar
citasGoogle.contenido = entradaFeed.Content.Content
citasGoogle.titulo = entradaFeed.Title.Text
citasGoogle.fechaInicio = fechaEvento.StartTime
citasGoogle.fechaFin = fechaEvento.EndTime
lugarCita = ""
For i = 0 To entradaFeed.Locations.Count - 1
If lugarCita <> "" Then
lugarCita = lugarCita & ", " & entradaFeed.Locations.Item(i).ValueString
Else
lugarCita = entradaFeed.Locations.Item(i).ValueString
End If
Next
citasGoogle.lugar = lugarCita
participantesCita = ""
For i = 0 To entradaFeed.Participants.Count - 1
If participantesCita <> "" Then
participantesCita = participantesCita & ", " & entradaFeed.Participants.Item(i).ValueString
Else
participantesCita = entradaFeed.Participants.Item(i).ValueString
End If
Next
citasGoogle.participantes = participantesCita
citasT.Add(citasGoogle)
Next
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation)
End Try
End Sub El código fuente source code en VB .Net para exportar las citas del ListView a un fichero de texto plano con formato CSV (botón "Exportar citas a fichero CSV"):Private Sub btExportarCSV_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btExportarCSV.Click
dlGuardar.Filter = "Archivos CSV (*.csv)|*.csv|Todos los archivos (*.*)|*.*"
dlGuardar.FilterIndex = 1
dlGuardar.DefaultExt = "csv"
dlGuardar.FileName = "Eventos google calendar"
dlGuardar.OverwritePrompt = True
dlGuardar.Title = "Guardar eventos Google Calendar"
If dlGuardar.ShowDialog Then
exportarListViewCSV(lsCitas, dlGuardar.FileName)
End If
End Sub
El botón anterior usa el procedimiento exportarListViewCSV para realizar la exportación: 'Exportar contenido ListView a formato CSV
'para abrir con Microsoft Office Excel, OppenOffice Calc o con
Private Sub exportarListViewCSV(ByVal lstview As ListView, ByVal ficheroCSV As String)
Dim lineasCSV As New System.Text.StringBuilder
Dim lineaActual As String = String.Empty
'Escribir nombre de columnas y encabezados en la variable temporal
For columnIndex As Int32 = 0 To lstview.Columns.Count - 1
lineaActual &= (String.Format(Chr(34) & "{0}" & Chr(34) & ";", lstview.Columns(columnIndex).Text))
Next
'Quitar la coma final
lineasCSV.AppendLine(lineaActual.Substring(0, lineaActual.Length - 1))
lineaActual = String.Empty
'Escribir los datos del ListView en la variable temporal
For Each item As ListViewItem In lstview.Items
For Each subItem As ListViewItem.ListViewSubItem In item.SubItems
lineaActual &= (String.Format(Chr(34) & "{0}" & Chr(34) & ";", subItem.Text))
Next
'Quitar coma final
lineasCSV.AppendLine(lineaActual.Substring(0, lineaActual.Length - 1))
lineaActual = String.Empty
Next
'Guardar datos variable temporal a fichero CSV
Dim Sys As New System.IO.StreamWriter(ficheroCSV)
Sys.WriteLine(lineasCSV.ToString)
Sys.Flush()
Sys.Dispose()
End Sub El código fuente en Visual Basic .Net para obtener los calendarios del usuario de Google Calendar (botón "Obtener calendarios") : Private Sub btObtenerCalendariosLista_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btObtenerCalendariosLista.Click
Try
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
bePanel1.Text = "Obteniendo lista de calendarios de Google Calendar..."
be.Refresh()
lsListaCalendarios.Items.Clear()
obtenerCalendarios(opSoloPropietarioListaCalendarios.Checked)
lsListaCalendarios.BeginUpdate()
lsListaCalendarios.Columns.Clear()
lsListaCalendarios.Items.Clear()
lsListaCalendarios.View = View.Details
lsListaCalendarios.Columns.Add(New ColHeader("Título", 200, HorizontalAlignment.Left, True))
lsListaCalendarios.Columns.Add(New ColHeader("Descripción", 200, HorizontalAlignment.Left, True))
lsListaCalendarios.Columns.Add(New ColHeader("Creadores/Autores", 200, HorizontalAlignment.Left, True))
lsListaCalendarios.Columns.Add(New ColHeader("ID", 150, HorizontalAlignment.Left, True))
lsListaCalendarios.Columns.Add(New ColHeader("Sólo lectura", 100, HorizontalAlignment.Left, True))
Dim i As Integer
For i = 0 To calendariosT.Count - 1
Dim elementoLista As New ListViewItem
elementoLista = New ListViewItem(CStr(calendariosT.Item(i).titulo))
elementoLista.SubItems.Add(CStr(calendariosT.Item(i).descripcion))
elementoLista.SubItems.Add(CStr(calendariosT.Item(i).creadores))
elementoLista.SubItems.Add(calendariosT.Item(i).uri)
elementoLista.SubItems.Add(CStr(calendariosT.Item(i).soloLectura))
lsListaCalendarios.Items.Add(elementoLista)
Next i
lsListaCalendarios.EndUpdate()
bePanel1.Text = "Lista de calendarios obtenida correctamente"
be.Refresh()
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
Catch ex As Exception
bePanel1.Text = "Error al obtener lista de calendarios..."
be.Refresh()
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
MsgBox("Se ha producido un error al intentar obtener la " & _
"lista de calendarios de Google Calendar: " & _
vbCrLf & vbCrLf & ex.Message,
MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation)
End Try
End Sub
El botón anterior usa el procedimiento "obtenerClanedarios" que ya hemos listado anteriormente. Existen otros procedimientos aunque no tienen que ver con Google Calendar, como son:
Guardar datos de configuración en fichero INI:
Private Sub guardarDatosINI()
Try
Dim objFicherosINI As New FicherosINI(
Path.Combine(Application.StartupPath, "configuracion.ini"))
Dim objCifrarRSA As New encriptacionRSA()
Dim ficheroDescripcion As String
objFicherosINI.WriteString("Validación",
"Usuario", txtUsuario.Text)
objFicherosINI.WriteBoolean("Validación", "Guardar contraseña", opRecordarContrasena.Checked)
objFicherosINI.WriteString("Evento",
"Asunto", txtEvento.Text)
objFicherosINI.WriteString("Evento",
"Lugar", txtLugar.Text)
objFicherosINI.WriteString("Evento",
"Recordatorio - Tiempo", txtRecordatorioTiempo.Text)
objFicherosINI.WriteString("Evento",
"Recordatorio - Tipo", lsRecordatorio.Text)
objFicherosINI.WriteString("Evento",
"Recordatorio - Unidad", lsRecordatorioUnidadTiempo.Text)
objFicherosINI.WriteString("Calendario", "Calendario actual", lsCalendarios.Text)
objFicherosINI.WriteBoolean("Calendario", "Sólo propietario", opSoloPropietario.Checked)
objFicherosINI.WriteString("Evento", "Invitados", txtInvitados.Text)
If opRecordarContrasena.Checked = True Then
' Cifrar/Encriptar la contraseña y guardarla en el INI
objFicherosINI.WriteString("Validación", "Contraseña",
Trim(objCifrarRSA.encriptar128BitRijndael(txtContrasena.Text, "clave_ajpdsoft")))
Else
objFicherosINI.WriteString("Validación", "Contraseña", "")
End If
'Guardar descripción en fichero
ficheroDescripcion = Path.Combine(Application.StartupPath, "descripcion.txt")
Dim fichero As New StreamWriter(ficheroDescripcion)
fichero.WriteLine(txtDescripcion.Text)
fichero.Close()
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation)
End Try
End Sub
Y la clase "FicherosINI": Public Class FicherosINI
' Funciones del API de Windows para ficheros INI
Private Declare Ansi Function GetPrivateProfileString _
Lib "kernel32.dll" Alias "GetPrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, ByVal lpDefault As String, _
ByVal lpReturnedString As System.Text.StringBuilder, _
ByVal nSize As Integer, ByVal lpFileName As String) _
As Integer
Private Declare Ansi Function WritePrivateProfileString _
Lib "kernel32.dll" Alias "WritePrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, ByVal lpString As String, _
ByVal lpFileName As String) As Integer
Private Declare Ansi Function GetPrivateProfileInt _
Lib "kernel32.dll" Alias "GetPrivateProfileIntA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, ByVal nDefault As Integer, _
ByVal lpFileName As String) As Integer
Private Declare Ansi Function FlushPrivateProfileString _
Lib "kernel32.dll" Alias "WritePrivateProfileStringA" _
(ByVal lpApplicationName As Integer, _
ByVal lpKeyName As Integer, ByVal lpString As Integer, _
ByVal lpFileName As String) As Integer
Dim strFilename As String
' Constructor, para aceptar el fichero INI
Public Sub New(ByVal Filename As String)
strFilename = Filename
End Sub
'Propiedad sólo lectura con nombre de fichero
ReadOnly Property FileName() As String
Get
Return strFilename
End Get
End Property
'Función para leer cadena de texto (string) de fichero INI
Public Function GetString(ByVal Section As String, _
ByVal Key As String, ByVal [Default] As String) As String
Dim intCharCount As Integer
Dim objResult As New System.Text.StringBuilder(256)
intCharCount = GetPrivateProfileString(Section, Key, _
[Default], objResult, objResult.Capacity, strFilename)
If intCharCount > 0 Then
GetString = Left(objResult.ToString, intCharCount)
Else
GetString = ""
End If
End Function
'Función para leer un valor numérico del fichero INI
Public Function GetInteger(ByVal Section As String, _
ByVal Key As String, ByVal [Default] As Integer) As Integer
Return GetPrivateProfileInt(Section, Key, _
[Default], strFilename)
End Function
'Función para leer un valor booleano de fichero INI
Public Function GetBoolean(ByVal Section As String, _
ByVal Key As String, ByVal [Default] As Boolean) As Boolean
Return (GetPrivateProfileInt(Section, Key, _
CInt([Default]), strFilename) = 1)
End Function
'Función para escribir valor de cadena (string) en fichero INI
Public Sub WriteString(ByVal Section As String, _
ByVal Key As String, ByVal Value As String)
WritePrivateProfileString(Section, Key, Value, strFilename)
Flush()
End Sub
'Función para escribir valor numérico en fichero INI
Public Sub WriteInteger(ByVal Section As String, _
ByVal Key As String, ByVal Value As Integer)
' Writes an integer to your INI file
WriteString(Section, Key, CStr(Value))
Flush()
End Sub
'Función para escribir valor booleano en fichero INI
Public Sub WriteBoolean(ByVal Section As String, _
ByVal Key As String, ByVal Value As Boolean)
' Writes a boolean to your INI file
WriteString(Section, Key, CStr(Math.Abs(CInt(Value))))
Flush()
End Sub
'Guarda los cambios de la caché en fichero INI
Private Sub Flush()
FlushPrivateProfileString(0, 0, 0, strFilename)
End Sub
End ClassPara la encriptación de la contraseña del usuario (si decide guardarla): Public Class encriptacionRSA
Public Function encriptar128BitRijndael(
ByVal textoEncriptar As String,
ByVal claveEncriptacion As String) As String
Dim bytValue() As Byte
Dim bytKey() As Byte
Dim bytEncoded() As Byte = New Byte() {}
Dim bytIV() As Byte = {121, 241, 10, 1, 132,
74, 11, 39, 255, 91, 45,
78, 14, 211, 22, 62}
Dim intLength As Integer
Dim intRemaining As Integer
Dim objMemoryStream As New MemoryStream()
Dim objCryptoStream As CryptoStream
Dim objRijndaelManaged As RijndaelManaged
'Quitar nulos en cadena de texto a encriptar
textoEncriptar = quitarNullCadena(textoEncriptar)
If textoEncriptar = "" Then
Return ""
End If
bytValue = Encoding.ASCII.GetBytes(textoEncriptar.ToCharArray)
intLength = Len(claveEncriptacion)
'La clave de cifrado debe ser de 256 bits de longitud (32 bytes)
'Si tiene más de 32 bytes se truncará
'Si es menor de 32 bytes se rellenará con X
If intLength >= 32 Then
claveEncriptacion = Strings.Left(claveEncriptacion, 32)
Else
intLength = Len(claveEncriptacion)
intRemaining = 32 - intLength
claveEncriptacion = claveEncriptacion & Strings.StrDup(intRemaining, "X")
End If
bytKey = Encoding.ASCII.GetBytes(claveEncriptacion.ToCharArray)
objRijndaelManaged = New RijndaelManaged()
Try
'Crear objeto Encryptor y escribir su valor
'después de que se convierta en array de bytes
objCryptoStream = New CryptoStream(objMemoryStream, _
objRijndaelManaged.CreateEncryptor(bytKey, bytIV), _
CryptoStreamMode.Write)
objCryptoStream.Write(bytValue, 0, bytValue.Length)
objCryptoStream.FlushFinalBlock()
bytEncoded = objMemoryStream.ToArray
objMemoryStream.Close()
objCryptoStream.Close()
Catch ex As Exception
MsgBox("Error al encriptar cadena de texto: " &
ex.Message, MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation)
End Try
'Devolver el valor del texto encriptado
'convertido de array de bytes a texto en base64
Return Convert.ToBase64String(bytEncoded)
End Function
Public Function desencriptar128BitRijndael(
ByVal textoEncriptado As String,
ByVal claveDesencriptacion As String) As String
Dim bytDataToBeDecrypted() As Byte
Dim bytTemp() As Byte
Dim bytIV() As Byte = {121, 241, 10, 1, 132,
74, 11, 39, 255, 91,
45, 78, 14, 211, 22, 62}
Dim objRijndaelManaged As New RijndaelManaged()
Dim objMemoryStream As MemoryStream
Dim objCryptoStream As CryptoStream
Dim bytDecryptionKey() As Byte
Dim intLength As Integer
Dim intRemaining As Integer
Dim strReturnString As String = String.Empty
If textoEncriptado = "" Then
Return ""
End If
'Convertir el valor encriptado base64 a array de bytes
bytDataToBeDecrypted = Convert.FromBase64String(textoEncriptado)
'La clave de desencriptación debe ser de 256 bits de longitud (32 bytes)
'Si tiene más de 32 bytes se truncará
'Si es menor de 32 bytes se rellenará con A
intLength = Len(claveDesencriptacion)
If intLength >= 32 Then
claveDesencriptacion = Strings.Left(claveDesencriptacion, 32)
Else
intLength = Len(claveDesencriptacion)
intRemaining = 32 - intLength
claveDesencriptacion = claveDesencriptacion & Strings.StrDup(intRemaining, "X")
End If
bytDecryptionKey = Encoding.ASCII.GetBytes(claveDesencriptacion.ToCharArray)
ReDim bytTemp(bytDataToBeDecrypted.Length)
objMemoryStream = New MemoryStream(bytDataToBeDecrypted)
Try
'Crear objeto Dencryptor y escribir su valor
'después de que se convierta en array de bytes
objCryptoStream = New CryptoStream(objMemoryStream, _
objRijndaelManaged.CreateDecryptor(bytDecryptionKey, bytIV), _
CryptoStreamMode.Read)
objCryptoStream.Read(bytTemp, 0, bytTemp.Length)
'objCryptoStream.FlushFinalBlock()
objMemoryStream.Close()
objCryptoStream.Close()
Catch ex As Exception
MsgBox("Error al desencriptar cadena de texto: " &
ex.Message, MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation)
End Try
'Devolver la cadena de texto desencriptada
'convertida de array de bytes a cadena de texto ASCII
Return quitarNullCadena(Encoding.ASCII.GetString(bytTemp))
End Function
'Quita nulos de una cadena de texto
Public Function quitarNullCadena(
ByVal texto As String) As String
Dim posicionNull As Integer
Dim textoSinNull As String
posicionNull = 1
textoSinNull = texto
Do While posicionNull > 0
posicionNull = InStr(posicionNull, texto, vbNullChar)
If posicionNull > 0 Then
textoSinNull =
Left$(textoSinNull, posicionNull - 1) & _
Right$(textoSinNull,
Len(textoSinNull) - posicionNull)
End If
If posicionNull > textoSinNull.Length Then
Exit Do
End If
Loop
Return textoSinNull
End Function
End ClassAjpdSoft Insertar Evento Google Calendar
Si eres desarrollador de software y quieres descargar gratuitamente el código fuente source code completo en Microsoft Visual Basic .Net (Microsoft Visual Studio 2010) sólo tendrás que registrarte en nuestra web (de forma completamente gratuita) y acceder a la descarga:
A continuación os mostramos la aplicación AjpdSoft Insertar Evento Google Calendar en funcionamiento:
En primer lugar introduciremos usuario y contraseña de nuestra cuenta de Google, si queremos comprobar si los datos son correctos pulsaremos "Probar validación":
Si el usuario y contraseña pertenecen a una cuenta de Google mostrará el siguiente mensaje indicando "Validación realizada correctamente con la cuenta de Google indicada. Token ...":
Para insertar o añadir un nuevo evento en un calendario del usuario, en primer lugar pulsaremos en el botón "Calendarios" en la pestaña "Insertar cita" para obtener la lista de todos los calendarios del usuario, a continuación seleccionaremos el calendario en el que queramos insertar el evento, introduciremos los datos (fecha desde, fecha hasta, evento, lugar, descripción, tipo de recordatorio, invitados y pulsaremos "Enviar evento":
Si todo es correcto la aplicación AjpdSoft Insertar Evento Google Calendar mostrará el mensaje "Evento enviado correctamente a Google Calendar":
Ahora podremos comprobar que, efectivamente, el evento ha sido añadido abriendo un navegador web y accediendo a nuestra cuenta de Google Calendar (Gmail):
Pulsando en el evento podremos ver todos los datos insertados con nuestra aplicación AjpdSoft Insertar Evento Google Calendar:
Desde la pestaña "Mostrar citas" podremos consultar todas las citas o eventos de cualquier calendario de nuestro usuario de Google Calendar, podremos acotar el resultado seleccionando una fecha desde y una fecha hasta. Como en la ventana de inserción de cita, en este caso también pulsaremos en "Calendarios" para obtener la lista de los calendarios del usuario, seleccionaremos el calendario del que queramos consultar los eventos, la fecha desde, fecha hasta y número máximo de eventos a consultar y pulsaremos en "Obtener citas". Si todo es correcto la aplicación AjpdSoft Insertar Evento Google Calendar obtendrá todos los eventos entre las fechas indicadas del calendario seleccionado: fecha de inicio, fecha de fin, asunto, lugar, descripción y participantes (invitados):
Además, en la ventana anterior, AjpdSoft Insertar Evento Google Calendar permite exportar las citas/eventos obtenidos a un fichero de texto CSV, para ello será suficiente con pulsar en el botón "Exportar citas a fichero CSV".
Desde la pestaña "Calendarios" podremos obtener la lista de todos los calendarios del usuario de Google Calendar e insertar un nuevo calendario:
Anexo
- Código fuente source code completo en Microsoft Visual Basic .Net 2010 VB.Net (fichero "formEnviarCitaCalendar.vb"):
Imports Google.GData.Calendar
Imports Google.GData.Client
Imports Google.GData.Extensions
Imports System.IO
Public Class formEnviarCitaCalendar
'Para obtener las citas de un calendario Google Calendar
Public Structure citasGoogleCalendar
Public id As String
Public titulo As String
Public fechaInicio As Date
Public fechaFin As Date
Public contenido As String
Public lugar As String
Public participantes As String
End Structure
Dim citasT As New List(Of citasGoogleCalendar)
'Para obtener los calendarios de Google Calendar
Public Structure calendariosGoogleCalendar
Public titulo As String
Public uri As String
Public descripcion As String
Public soloLectura As Boolean
Public creadores As String
End Structure
Dim calendariosT As New List(Of calendariosGoogleCalendar)
' Clase ColHeader es un objeto ColumnHeader con una propiedad
' adicional para determinar un orden ascendente o descendente
' True especifica orden ascendente, false descendente
Public Class ColHeader
Inherits ColumnHeader
Public ascending As Boolean
Public Sub New(ByVal [text] As String, ByVal width As Integer,
ByVal align As HorizontalAlignment, ByVal asc As Boolean)
Me.Text = [text]
Me.Width = width
Me.TextAlign = align
Me.ascending = asc
End Sub
End Class
'Exportar contenido ListView a formato CSV
'para abrir con Microsoft Office Excel, OppenOffice Calc o con
Private Sub exportarListViewCSV(ByVal lstview As ListView, ByVal ficheroCSV As String)
Dim lineasCSV As New System.Text.StringBuilder
Dim lineaActual As String = String.Empty
'Escribir nombre de columnas y encabezados en la variable temporal
For columnIndex As Int32 = 0 To lstview.Columns.Count - 1
lineaActual &= (String.Format(Chr(34) & "{0}" & Chr(34) & ";", lstview.Columns(columnIndex).Text))
Next
'Quitar la coma final
lineasCSV.AppendLine(lineaActual.Substring(0, lineaActual.Length - 1))
lineaActual = String.Empty
'Escribir los datos del ListView en la variable temporal
For Each item As ListViewItem In lstview.Items
For Each subItem As ListViewItem.ListViewSubItem In item.SubItems
lineaActual &= (String.Format(Chr(34) & "{0}" & Chr(34) & ";", subItem.Text))
Next
'Quitar coma final
lineasCSV.AppendLine(lineaActual.Substring(0, lineaActual.Length - 1))
lineaActual = String.Empty
Next
'Guardar datos variable temporal a fichero CSV
Dim Sys As New System.IO.StreamWriter(ficheroCSV)
Sys.WriteLine(lineasCSV.ToString)
Sys.Flush()
Sys.Dispose()
End Sub
Private Sub btValidar_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles btValidar.Click
Try
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
bePanel1.Text = "Validando credenciales en Google..."
be.Refresh()
'Autenticación en Google con usuario y contraseña
Dim servicioGoogle As New CalendarService("AjpdSoftCitaGoogleCalendar")
Dim token As String
servicioGoogle.setUserCredentials(txtUsuario.Text, txtContrasena.Text)
token = servicioGoogle.QueryClientLoginToken()
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
MsgBox("Validación realizada correctamente con la " & _
"cuenta de Google indicada." & _
vbCrLf & vbCrLf + "Token: " & vbCrLf & token,
MsgBoxStyle.Information + MsgBoxStyle.OkOnly)
Catch ex As Exception
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
MsgBox("Se ha producido un error al intentar validar el usuario " &
"y la contraseña en Google: " & _
vbCrLf & vbCrLf & ex.Message,
MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation)
End Try
End Sub
Function obtenerHoraMinuto(ByVal fecha As Date) As String
Dim horaMinuto As String = "00:00"
Dim hora As String = "00"
Dim minuto As String = "00"
If Len(Trim(Str(fecha.Hour))) = 1 Then
hora = "0" & fecha.Hour
Else
hora = fecha.Hour
End If
If Len(Trim(Str(fecha.Minute))) = 1 Then
minuto = "0" & fecha.Minute
Else
minuto = fecha.Minute
End If
horaMinuto = hora & ":" & minuto
obtenerHoraMinuto = horaMinuto
End Function
Private Sub guardarDatosINI()
Try
Dim objFicherosINI As New FicherosINI(
Path.Combine(Application.StartupPath, "configuracion.ini"))
Dim objCifrarRSA As New encriptacionRSA()
Dim ficheroDescripcion As String
objFicherosINI.WriteString("Validación",
"Usuario", txtUsuario.Text)
objFicherosINI.WriteBoolean("Validación", "Guardar contraseña", opRecordarContrasena.Checked)
objFicherosINI.WriteString("Evento",
"Asunto", txtEvento.Text)
objFicherosINI.WriteString("Evento",
"Lugar", txtLugar.Text)
objFicherosINI.WriteString("Evento",
"Recordatorio - Tiempo", txtRecordatorioTiempo.Text)
objFicherosINI.WriteString("Evento",
"Recordatorio - Tipo", lsRecordatorio.Text)
objFicherosINI.WriteString("Evento",
"Recordatorio - Unidad", lsRecordatorioUnidadTiempo.Text)
objFicherosINI.WriteString("Calendario", "Calendario actual", lsCalendarios.Text)
objFicherosINI.WriteBoolean("Calendario", "Sólo propietario", opSoloPropietario.Checked)
objFicherosINI.WriteString("Evento", "Invitados", txtInvitados.Text)
If opRecordarContrasena.Checked = True Then
' Cifrar/Encriptar la contraseña y guardarla en el INI
objFicherosINI.WriteString("Validación", "Contraseña",
Trim(objCifrarRSA.encriptar128BitRijndael(txtContrasena.Text, "clave_ajpdsoft")))
Else
objFicherosINI.WriteString("Validación", "Contraseña", "")
End If
'Guardar descripción en fichero
ficheroDescripcion = Path.Combine(Application.StartupPath, "descripcion.txt")
Dim fichero As New StreamWriter(ficheroDescripcion)
fichero.WriteLine(txtDescripcion.Text)
fichero.Close()
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation)
End Try
End Sub
Private Sub formEnviarCitaCalendar_Load(
ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles MyBase.Load
Dim objFicherosINI As New FicherosINI(
Path.Combine(Application.StartupPath, "configuracion.ini"))
Dim objCifrarRSA As New encriptacionRSA()
Dim fecha As Date = Now()
Dim ficheroDescripcion As String
Dim calendarioActual As String
Try
'Establecemos la fecha y hora de inicio y de fin
fecha = DateTime.Now
txtDesdeDia.Value = fecha
txtHastaDia.Value = fecha
txtDesdeHora.Text = obtenerHoraMinuto(fecha)
fecha = fecha.AddMinutes(30)
txtHastaHora.Text = obtenerHoraMinuto(fecha)
'Cargamos los valores del fichero de configuracion.ini
opRecordarContrasena.Checked = objFicherosINI.GetBoolean("Validación", "Guardar contraseña", False)
txtUsuario.Text = objFicherosINI.GetString("Validación", "Usuario", "")
txtEvento.Text = objFicherosINI.GetString("Evento", "Asunto", "")
txtLugar.Text = objFicherosINI.GetString("Evento", "Lugar", "")
txtRecordatorioTiempo.Text =
objFicherosINI.GetString("Evento", "Recordatorio - Tiempo", "")
lsRecordatorio.Text =
objFicherosINI.GetString("Evento", "Recordatorio - Tipo", "")
lsRecordatorioUnidadTiempo.Text =
objFicherosINI.GetString("Evento", "Recordatorio - Unidad", "")
txtInvitados.Text =
objFicherosINI.GetString("Evento", "Invitados", "")
calendarioActual = objFicherosINI.GetString("Calendario", "Calendario actual", "")
lsCalendarios.Items.Add(calendarioActual)
lsCalendarios.Text = calendarioActual
opSoloPropietario.Checked = objFicherosINI.GetBoolean("Calendario", "Sólo propietario", False)
opRecordarContrasena.Checked = objFicherosINI.GetBoolean("Validación", "Guardar contraseña", False)
'Desencriptar/descifrar la contraseña y mostrarla
txtContrasena.Text = objCifrarRSA.desencriptar128BitRijndael(
objFicherosINI.GetString("Validación", "Contraseña", ""), "clave_ajpdsoft")
ficheroDescripcion = Path.Combine(Application.StartupPath, "descripcion.txt")
If File.Exists(ficheroDescripcion) = True Then
Dim Reader As StreamReader = File.OpenText(ficheroDescripcion)
Dim fichero As String = Reader.ReadToEnd()
Reader.Close()
txtDescripcion.Text = fichero
End If
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation)
End Try
End Sub
Private Sub btSalinSinGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
End
End Sub
Private Sub ValidarUsuarioToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
btValidar_Click(sender, e)
End Sub
Private Sub ObtenerCalendariosToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
btListaCalendarios_Click(sender, e)
End Sub
Private Sub EnviarEventocitaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
btEnviar_Click(sender, e)
End Sub
Private Sub LimpiarDatosActualesToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
btLimpiar_Click(sender, e)
End Sub
Private Sub SalirYGuardarDatosToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
btSalir_Click(sender, e)
End Sub
'Obtiene los calendarios del usuario de Google Calendar
Private Sub obtenerCalendarios(ByVal propietario As Boolean)
Try
'Alta del servicio de Google y autenticación en Google
Dim servicioGoogle As New CalendarService("AjpdSoftInsertarCitaGoogleCalendar")
servicioGoogle.setUserCredentials(txtUsuario.Text, txtContrasena.Text)
Dim consultaCalendar As CalendarQuery = New CalendarQuery()
If propietario Then
consultaCalendar.Uri =
New Uri("https://www.google.com/calendar/feeds/default/owncalendars/full")
Else
consultaCalendar.Uri =
New Uri("https://www.google.com/calendar/feeds/default/allcalendars/full")
End If
Dim resultadoFeed As CalendarFeed = servicioGoogle.Query(consultaCalendar)
calendariosT.Clear()
Dim creadoresCalendario As String
Dim i As Integer
For Each entradaActual As CalendarEntry In resultadoFeed.Entries
Dim calendarios As New calendariosGoogleCalendar
calendarios.titulo = entradaActual.Title.Text
calendarios.uri = entradaActual.Id.AbsoluteUri.Substring(63)
calendarios.descripcion = entradaActual.Summary.Text
calendarios.soloLectura = resultadoFeed.ReadOnly
creadoresCalendario = ""
For i = 0 To resultadoFeed.Authors.Count - 1
If creadoresCalendario <> "" Then
creadoresCalendario = creadoresCalendario & ", " & resultadoFeed.Authors.Item(i).Email
Else
creadoresCalendario = resultadoFeed.Authors.Item(i).Email
End If
Next
calendarios.creadores = creadoresCalendario
calendariosT.Add(calendarios)
Next
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation)
End Try
End Sub
'Obtiene las citas (eventos) del calendario indicado según el filtro indicado
Private Sub obtenerCitasGoogleCalendar(ByVal calendario As String, ByVal numeroMaximoCitas As Integer)
Dim lugarCita As String
Dim participantesCita As String
Dim i As Integer
Try
Dim servicioGoogle As Google.GData.Calendar.CalendarService =
New Google.GData.Calendar.CalendarService("AjpdSoftInsertarCitaGoogleCalendar")
servicioGoogle.setUserCredentials(txtUsuario.Text, txtContrasena.Text)
Dim consultaCalendar As Google.GData.Calendar.EventQuery =
New Google.GData.Calendar.EventQuery()
' consultaCalendar.Uri = New Uri("http://www.google.com/calendar/feeds/" +
' servicioGoogle.Credentials.Username +
' "/private/full?max-results=1000")
'Insertamos el evento creado en Google Calendar
consultaCalendar.Uri = New Uri("https://www.google.com/calendar/feeds/" &
calendario &
"/private/full?max-results=" & CStr(numeroMaximoCitas))
consultaCalendar.StartTime = txtCitasDesde.Value
consultaCalendar.EndTime = txtCitasHasta.Value
Dim entradaFeed As Google.GData.Calendar.EventEntry
Dim calendarioFeed As Google.GData.Calendar.EventFeed = servicioGoogle.Query(consultaCalendar)
citasT.Clear()
For Each entradaFeed In calendarioFeed.Entries
Dim fechaEvento As New [When](entradaFeed.Times(0).StartTime, entradaFeed.Times(0).EndTime)
Dim citasGoogle As New citasGoogleCalendar
citasGoogle.contenido = entradaFeed.Content.Content
citasGoogle.titulo = entradaFeed.Title.Text
citasGoogle.fechaInicio = fechaEvento.StartTime
citasGoogle.fechaFin = fechaEvento.EndTime
lugarCita = ""
For i = 0 To entradaFeed.Locations.Count - 1
If lugarCita <> "" Then
lugarCita = lugarCita & ", " & entradaFeed.Locations.Item(i).ValueString
Else
lugarCita = entradaFeed.Locations.Item(i).ValueString
End If
Next
citasGoogle.lugar = lugarCita
participantesCita = ""
For i = 0 To entradaFeed.Participants.Count - 1
If participantesCita <> "" Then
participantesCita = participantesCita & ", " & entradaFeed.Participants.Item(i).ValueString
Else
participantesCita = entradaFeed.Participants.Item(i).ValueString
End If
Next
citasGoogle.participantes = participantesCita
citasT.Add(citasGoogle)
Next
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation)
End Try
End Sub
Private Sub btObtenerCitas_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btObtenerCitas.Click
If lsCalendariosCitas.Text = "" Then
MsgBox("Debe especificiar el calendario del que se obtendrán los eventos/citas.",
MsgBoxStyle.Information + MsgBoxStyle.OkOnly)
lsCalendariosCitas.Focus()
Else
Dim i As Integer
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
bePanel1.Text = "Obteniendo eventos/citas de Google Calendar..."
be.Refresh()
Try
lsCitas.BeginUpdate()
lsCitas.Columns.Clear()
lsCitas.Items.Clear()
lsCitas.View = View.Details
lsCitas.Columns.Add(New ColHeader("Fecha inicio", 120, HorizontalAlignment.Left, True))
lsCitas.Columns.Add(New ColHeader("Fecha fin", 120, HorizontalAlignment.Left, True))
lsCitas.Columns.Add(New ColHeader("Asunto", 200, HorizontalAlignment.Left, True))
lsCitas.Columns.Add(New ColHeader("Lugar", 100, HorizontalAlignment.Left, True))
lsCitas.Columns.Add(New ColHeader("Descripción", 200, HorizontalAlignment.Left, True))
lsCitas.Columns.Add(New ColHeader("Participantes", 100, HorizontalAlignment.Left, True))
obtenerCitasGoogleCalendar(calendariosT.Item(lsCalendariosCitas.SelectedIndex).uri, txtNumeroMaximoCitas.Value)
For i = 0 To citasT.Count - 1
Dim elementoLista As New ListViewItem
elementoLista = New ListViewItem(CStr(citasT.Item(i).fechaInicio))
elementoLista.SubItems.Add(CStr(citasT.Item(i).fechaFin))
elementoLista.SubItems.Add(citasT.Item(i).titulo)
elementoLista.SubItems.Add(citasT.Item(i).lugar)
elementoLista.SubItems.Add(citasT.Item(i).contenido)
elementoLista.SubItems.Add(citasT.Item(i).participantes)
lsCitas.Items.Add(elementoLista)
lInfoNumCitas.Text = "Obteniendo evento/cita: " & CStr(i + 1)
lInfoNumCitas.Refresh()
Next i
lsCitas.EndUpdate()
lInfoNumCitas.Text = "Número de citas/eventos: " & CStr(citasT.Count)
lInfoNumCitas.Refresh()
bePanel1.Text = "Obtenidas " & CStr(citasT.Count) & " citas"
be.Refresh()
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
Catch ex As Exception
bePanel1.Text = "Error al consultar citas/eventos de Google Calendar."
be.Refresh()
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
MsgBox("Se ha producido un error al intentar obtener eventos de Google Calendar: " & _
vbCrLf & vbCrLf & ex.Message,
MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation)
End Try
End If
End Sub
Private Sub btEnviar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btEnviar.Click
If lsCalendarios.Text = "" Then
MsgBox("Debe especificiar el calendario en el que se insertará el evento.",
MsgBoxStyle.Information + MsgBoxStyle.OkOnly)
lsCalendarios.Focus()
Else
Try
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
bePanel1.Text = "Enviando evento a Google Calendar..."
be.Refresh()
'Alta del servicio de Google y autenticación en Google
Dim servicioGoogle As New CalendarService("AjpdSoftInsertarCitaGoogleCalendar")
servicioGoogle.setUserCredentials(txtUsuario.Text, txtContrasena.Text)
Dim entradaCalendario As New EventEntry
'Asunto (título) del evento Google Calendar
entradaCalendario.Title.Text = txtEvento.Text
'Descripción del evento Google Calendar
entradaCalendario.Content.Content = txtDescripcion.Text
'Lugar del evento Google Calendar
Dim ubicacionEvento = New Where()
ubicacionEvento.ValueString = txtLugar.Text
entradaCalendario.Locations.Add(ubicacionEvento)
'Fecha y hora inicio del evento, fecha y hora fin del evento Google Calendar
Dim fechaInicioTxt As String = txtDesdeDia.Text & " " & txtDesdeHora.Text
Dim fechaInicio As Date =
Date.Parse(fechaInicioTxt, System.Globalization.CultureInfo.CurrentCulture)
Dim fechaFinTxt As String = txtHastaDia.Text & " " & txtHastaHora.Text
Dim fechaFin As Date =
Date.Parse(fechaFinTxt, System.Globalization.CultureInfo.CurrentCulture)
Dim desdeHastaCalendar As New [When](fechaInicio, fechaFin)
entradaCalendario.Times.Add(desdeHastaCalendar)
'** INICIO Activar tipo de Recordatorio
Dim Recordatorio As New Reminder
'Unidad de tiempo (horas, minutos, días)
If lsRecordatorioUnidadTiempo.Text = "minutos" Then
Recordatorio.Minutes = CInt(txtRecordatorioTiempo.Text)
End If
If lsRecordatorioUnidadTiempo.Text = "horas" Then
Recordatorio.Hours = CInt(txtRecordatorioTiempo.Text)
End If
If lsRecordatorioUnidadTiempo.Text = "días" Then
Recordatorio.Days = CInt(txtRecordatorioTiempo.Text)
End If
'tipo de recordatorio (SMS, correo electrónico, ventana emergente)
If lsRecordatorio.Text = "SMS" Then
Recordatorio.Method = Reminder.ReminderMethod.sms
End If
If lsRecordatorio.Text = "Correo electrónico" Then
Recordatorio.Method = Reminder.ReminderMethod.email
End If
If lsRecordatorio.Text = "Ventana emergente" Then
Recordatorio.Method = Reminder.ReminderMethod.alert
End If
entradaCalendario.Reminders.Add(Recordatorio)
'** FIN Activar tipo de Recordatorio
'Inserta los invitados de la cita de Google Calendar
If txtInvitados.Text <> "" Then
Dim invintadosSeparados() As String
Dim i As Integer
invintadosSeparados = Split(txtInvitados.Text, ",")
Dim invitado As Who
For i = 0 To UBound(invintadosSeparados)
invitado = New Who()
invitado.Rel = Who.RelType.MESSAGE_TO
invitado.Email = invintadosSeparados(i)
entradaCalendario.Participants.Add(invitado)
Next i
End If
'Insertamos el evento creado en Google Calendar
Dim uriDireccionGoogle As New Uri("https://www.google.com/calendar/feeds/" &
calendariosT.Item(lsCalendarios.SelectedIndex).uri & "/private/full")
Dim entradaEventoInsertar As AtomEntry =
servicioGoogle.Insert(uriDireccionGoogle, entradaCalendario)
MsgBox("Evento enviado correctamente a Google Calendar.",
MsgBoxStyle.OkOnly + MsgBoxStyle.Information)
bePanel1.Text = "Evento enviado correctamente a Google Calendar"
be.Refresh()
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
Catch ex As Exception
bePanel1.Text = "Error al enviar evento a Google Calendar..."
be.Refresh()
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
MsgBox("Se ha producido un error al intentar insertar un " & _
"evento en Google Calendar: " & _
vbCrLf & vbCrLf & ex.Message,
MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation)
End Try
End If
End Sub
Private Sub btListaCalendarios_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles btListaCalendarios.Click
Dim titulo As String = ""
Dim subtitulo As String = ""
Try
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
bePanel1.Text = "Obteniendo lista de calendarios de Google Calendar..."
be.Refresh()
lsCalendarios.Items.Clear()
obtenerCalendarios(opSoloPropietario.Checked)
Dim i As Integer
For i = 0 To calendariosT.Count - 1
lsCalendarios.Items.Add(calendariosT.Item(i).titulo)
Next i
If calendariosT.Count > 0 Then
lsCalendarios.SelectedIndex = 0
End If
bePanel1.Text = "Lista de calendarios obtenida correctamente"
be.Refresh()
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
Catch ex As Exception
bePanel1.Text = "Error al obtener lista de calendarios..."
be.Refresh()
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
MsgBox("Se ha producido un error al intentar obtener la " & _
"lista de calendarios de Google Calendar: " & _
vbCrLf & vbCrLf & ex.Message,
MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation)
End Try
End Sub
Private Sub btLimpiar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btLimpiar.Click
txtEvento.Text = ""
txtLugar.Text = ""
txtDescripcion.Text = ""
txtInvitados.Text = ""
End Sub
Private Sub btSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btSalir.Click
guardarDatosINI()
End
End Sub
Private Sub btSalinSinGuardar_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btSalinSinGuardar.Click
End
End Sub
Private Sub btCalendarioColor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btCalendarioColor.Click
If dlColor.ShowDialog Then
txtNuevoCalendarioColor.Text = "#" & CStr(Hex$(dlColor.Color.ToArgb))
End If
End Sub
Private Sub btInsertarCalendario_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btInsertarCalendario.Click
Try
'Alta del servicio de Google y autenticación en Google
Dim servicioGoogle As New CalendarService("AjpdSoftInsertarCitaGoogleCalendar")
servicioGoogle.setUserCredentials(txtUsuario.Text, txtContrasena.Text)
Dim entradaCalendario As New CalendarEntry
entradaCalendario.Title.Text = txtNuevoCalendarioNombre.Text
entradaCalendario.Summary.Text = txtNuevoCalendarioDescripcion.Text
entradaCalendario.TimeZone = System.TimeZone.CurrentTimeZone.StandardName
entradaCalendario.Hidden = opNuevoCalendarioOculto.Checked
entradaCalendario.Color = txtNuevoCalendarioColor.Text
entradaCalendario.Location = New Where("", "", txtNuevoCalendarioUbicacion.Text)
entradaCalendario.Selected = opNuevoCalendarioSeleccionado.Checked
Dim uriDireccionGoogle As New Uri("https://www.google.com/calendar/feeds/default/owncalendars/full")
servicioGoogle.Insert(uriDireccionGoogle, entradaCalendario)
Dim nuevoCalendario As CalendarEntry =
servicioGoogle.Insert(uriDireccionGoogle, entradaCalendario)
MsgBox("Calendario añadido correctamente.", MsgBoxStyle.Information + MsgBoxStyle.OkOnly)
Catch ex As Exception
MsgBox("Se ha producido un error al intentar añadir un calendario: " & _
vbCrLf & vbCrLf & ex.Message,
MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation)
End Try
End Sub
Private Sub btExportarCSV_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btExportarCSV.Click
dlGuardar.Filter = "Archivos CSV (*.csv)|*.csv|Todos los archivos (*.*)|*.*"
dlGuardar.FilterIndex = 1
dlGuardar.DefaultExt = "csv"
dlGuardar.FileName = "Eventos google calendar"
dlGuardar.OverwritePrompt = True
dlGuardar.Title = "Guardar eventos Google Calendar"
If dlGuardar.ShowDialog Then
exportarListViewCSV(lsCitas, dlGuardar.FileName)
End If
End Sub
Private Sub btObtenerCalendariosMostrarCitas_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles btObtenerCalendariosMostrarCitas.Click
Try
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
bePanel1.Text = "Obteniendo lista de calendarios de Google Calendar..."
be.Refresh()
lsCalendariosCitas.Items.Clear()
obtenerCalendarios(opSoloPropietarioCitas.Checked)
Dim i As Integer
For i = 0 To calendariosT.Count - 1
lsCalendariosCitas.Items.Add(calendariosT.Item(i).titulo)
Next i
If calendariosT.Count > 0 Then
lsCalendariosCitas.SelectedIndex = 0
End If
bePanel1.Text = "Lista de calendarios obtenida correctamente"
be.Refresh()
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
Catch ex As Exception
bePanel1.Text = "Error al obtener lista de calendarios..."
be.Refresh()
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
MsgBox("Se ha producido un error al intentar obtener la " & _
"lista de calendarios de Google Calendar: " & _
vbCrLf & vbCrLf & ex.Message,
MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation)
End Try
End Sub
Private Sub btObtenerCalendariosLista_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btObtenerCalendariosLista.Click
Try
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
bePanel1.Text = "Obteniendo lista de calendarios de Google Calendar..."
be.Refresh()
lsListaCalendarios.Items.Clear()
obtenerCalendarios(opSoloPropietarioListaCalendarios.Checked)
lsListaCalendarios.BeginUpdate()
lsListaCalendarios.Columns.Clear()
lsListaCalendarios.Items.Clear()
lsListaCalendarios.View = View.Details
lsListaCalendarios.Columns.Add(New ColHeader("Título", 200, HorizontalAlignment.Left, True))
lsListaCalendarios.Columns.Add(New ColHeader("Descripción", 200, HorizontalAlignment.Left, True))
lsListaCalendarios.Columns.Add(New ColHeader("Creadores/Autores", 200, HorizontalAlignment.Left, True))
lsListaCalendarios.Columns.Add(New ColHeader("ID", 150, HorizontalAlignment.Left, True))
lsListaCalendarios.Columns.Add(New ColHeader("Sólo lectura", 100, HorizontalAlignment.Left, True))
Dim i As Integer
For i = 0 To calendariosT.Count - 1
Dim elementoLista As New ListViewItem
elementoLista = New ListViewItem(CStr(calendariosT.Item(i).titulo))
elementoLista.SubItems.Add(CStr(calendariosT.Item(i).descripcion))
elementoLista.SubItems.Add(CStr(calendariosT.Item(i).creadores))
elementoLista.SubItems.Add(calendariosT.Item(i).uri)
elementoLista.SubItems.Add(CStr(calendariosT.Item(i).soloLectura))
lsListaCalendarios.Items.Add(elementoLista)
Next i
lsListaCalendarios.EndUpdate()
bePanel1.Text = "Lista de calendarios obtenida correctamente"
be.Refresh()
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
Catch ex As Exception
bePanel1.Text = "Error al obtener lista de calendarios..."
be.Refresh()
System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.Default
MsgBox("Se ha producido un error al intentar obtener la " & _
"lista de calendarios de Google Calendar: " & _
vbCrLf & vbCrLf & ex.Message,
MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation)
End Try
End Sub
End Class Imports System.Security.Cryptography
Imports System.Text
Imports System.IO
Public Class encriptacionRSA
Public Function encriptar128BitRijndael(
ByVal textoEncriptar As String,
ByVal claveEncriptacion As String) As String
Dim bytValue() As Byte
Dim bytKey() As Byte
Dim bytEncoded() As Byte = New Byte() {}
Dim bytIV() As Byte = {121, 241, 10, 1, 132,
74, 11, 39, 255, 91, 45,
78, 14, 211, 22, 62}
Dim intLength As Integer
Dim intRemaining As Integer
Dim objMemoryStream As New MemoryStream()
Dim objCryptoStream As CryptoStream
Dim objRijndaelManaged As RijndaelManaged
'Quitar nulos en cadena de texto a encriptar
textoEncriptar = quitarNullCadena(textoEncriptar)
If textoEncriptar = "" Then
Return ""
End If
bytValue = Encoding.ASCII.GetBytes(textoEncriptar.ToCharArray)
intLength = Len(claveEncriptacion)
'La clave de cifrado debe ser de 256 bits de longitud (32 bytes)
'Si tiene más de 32 bytes se truncará
'Si es menor de 32 bytes se rellenará con X
If intLength >= 32 Then
claveEncriptacion = Strings.Left(claveEncriptacion, 32)
Else
intLength = Len(claveEncriptacion)
intRemaining = 32 - intLength
claveEncriptacion = claveEncriptacion & Strings.StrDup(intRemaining, "X")
End If
bytKey = Encoding.ASCII.GetBytes(claveEncriptacion.ToCharArray)
objRijndaelManaged = New RijndaelManaged()
Try
'Crear objeto Encryptor y escribir su valor
'después de que se convierta en array de bytes
objCryptoStream = New CryptoStream(objMemoryStream, _
objRijndaelManaged.CreateEncryptor(bytKey, bytIV), _
CryptoStreamMode.Write)
objCryptoStream.Write(bytValue, 0, bytValue.Length)
objCryptoStream.FlushFinalBlock()
bytEncoded = objMemoryStream.ToArray
objMemoryStream.Close()
objCryptoStream.Close()
Catch ex As Exception
MsgBox("Error al encriptar cadena de texto: " &
ex.Message, MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation)
End Try
'Devolver el valor del texto encriptado
'convertido de array de bytes a texto en base64
Return Convert.ToBase64String(bytEncoded)
End Function
Public Function desencriptar128BitRijndael(
ByVal textoEncriptado As String,
ByVal claveDesencriptacion As String) As String
Dim bytDataToBeDecrypted() As Byte
Dim bytTemp() As Byte
Dim bytIV() As Byte = {121, 241, 10, 1, 132,
74, 11, 39, 255, 91,
45, 78, 14, 211, 22, 62}
Dim objRijndaelManaged As New RijndaelManaged()
Dim objMemoryStream As MemoryStream
Dim objCryptoStream As CryptoStream
Dim bytDecryptionKey() As Byte
Dim intLength As Integer
Dim intRemaining As Integer
Dim strReturnString As String = String.Empty
If textoEncriptado = "" Then
Return ""
End If
'Convertir el valor encriptado base64 a array de bytes
bytDataToBeDecrypted = Convert.FromBase64String(textoEncriptado)
'La clave de desencriptación debe ser de 256 bits de longitud (32 bytes)
'Si tiene más de 32 bytes se truncará
'Si es menor de 32 bytes se rellenará con A
intLength = Len(claveDesencriptacion)
If intLength >= 32 Then
claveDesencriptacion = Strings.Left(claveDesencriptacion, 32)
Else
intLength = Len(claveDesencriptacion)
intRemaining = 32 - intLength
claveDesencriptacion = claveDesencriptacion & Strings.StrDup(intRemaining, "X")
End If
bytDecryptionKey = Encoding.ASCII.GetBytes(claveDesencriptacion.ToCharArray)
ReDim bytTemp(bytDataToBeDecrypted.Length)
objMemoryStream = New MemoryStream(bytDataToBeDecrypted)
Try
'Crear objeto Dencryptor y escribir su valor
'después de que se convierta en array de bytes
objCryptoStream = New CryptoStream(objMemoryStream, _
objRijndaelManaged.CreateDecryptor(bytDecryptionKey, bytIV), _
CryptoStreamMode.Read)
objCryptoStream.Read(bytTemp, 0, bytTemp.Length)
'objCryptoStream.FlushFinalBlock()
objMemoryStream.Close()
objCryptoStream.Close()
Catch ex As Exception
MsgBox("Error al desencriptar cadena de texto: " &
ex.Message, MsgBoxStyle.OkOnly + MsgBoxStyle.Exclamation)
End Try
'Devolver la cadena de texto desencriptada
'convertida de array de bytes a cadena de texto ASCII
Return quitarNullCadena(Encoding.ASCII.GetString(bytTemp))
End Function
'Quita nulos de una cadena de texto
Public Function quitarNullCadena(
ByVal texto As String) As String
Dim posicionNull As Integer
Dim textoSinNull As String
posicionNull = 1
textoSinNull = texto
Do While posicionNull > 0
posicionNull = InStr(posicionNull, texto, vbNullChar)
If posicionNull > 0 Then
textoSinNull =
Left$(textoSinNull, posicionNull - 1) & _
Right$(textoSinNull,
Len(textoSinNull) - posicionNull)
End If
If posicionNull > textoSinNull.Length Then
Exit Do
End If
Loop
Return textoSinNull
End Function
End Class Public Class FicherosINI
' Funciones del API de Windows para ficheros INI
Private Declare Ansi Function GetPrivateProfileString _
Lib "kernel32.dll" Alias "GetPrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, ByVal lpDefault As String, _
ByVal lpReturnedString As System.Text.StringBuilder, _
ByVal nSize As Integer, ByVal lpFileName As String) _
As Integer
Private Declare Ansi Function WritePrivateProfileString _
Lib "kernel32.dll" Alias "WritePrivateProfileStringA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, ByVal lpString As String, _
ByVal lpFileName As String) As Integer
Private Declare Ansi Function GetPrivateProfileInt _
Lib "kernel32.dll" Alias "GetPrivateProfileIntA" _
(ByVal lpApplicationName As String, _
ByVal lpKeyName As String, ByVal nDefault As Integer, _
ByVal lpFileName As String) As Integer
Private Declare Ansi Function FlushPrivateProfileString _
Lib "kernel32.dll" Alias "WritePrivateProfileStringA" _
(ByVal lpApplicationName As Integer, _
ByVal lpKeyName As Integer, ByVal lpString As Integer, _
ByVal lpFileName As String) As Integer
Dim strFilename As String
' Constructor, para aceptar el fichero INI
Public Sub New(ByVal Filename As String)
strFilename = Filename
End Sub
'Propiedad sólo lectura con nombre de fichero
ReadOnly Property FileName() As String
Get
Return strFilename
End Get
End Property
'Función para leer cadena de texto (string) de fichero INI
Public Function GetString(ByVal Section As String, _
ByVal Key As String, ByVal [Default] As String) As String
Dim intCharCount As Integer
Dim objResult As New System.Text.StringBuilder(256)
intCharCount = GetPrivateProfileString(Section, Key, _
[Default], objResult, objResult.Capacity, strFilename)
If intCharCount > 0 Then
GetString = Left(objResult.ToString, intCharCount)
Else
GetString = ""
End If
End Function
'Función para leer un valor numérico del fichero INI
Public Function GetInteger(ByVal Section As String, _
ByVal Key As String, ByVal [Default] As Integer) As Integer
Return GetPrivateProfileInt(Section, Key, _
[Default], strFilename)
End Function
'Función para leer un valor booleano de fichero INI
Public Function GetBoolean(ByVal Section As String, _
ByVal Key As String, ByVal [Default] As Boolean) As Boolean
Return (GetPrivateProfileInt(Section, Key, _
CInt([Default]), strFilename) = 1)
End Function
'Función para escribir valor de cadena (string) en fichero INI
Public Sub WriteString(ByVal Section As String, _
ByVal Key As String, ByVal Value As String)
WritePrivateProfileString(Section, Key, Value, strFilename)
Flush()
End Sub
'Función para escribir valor numérico en fichero INI
Public Sub WriteInteger(ByVal Section As String, _
ByVal Key As String, ByVal Value As Integer)
' Writes an integer to your INI file
WriteString(Section, Key, CStr(Value))
Flush()
End Sub
'Función para escribir valor booleano en fichero INI
Public Sub WriteBoolean(ByVal Section As String, _
ByVal Key As String, ByVal Value As Boolean)
' Writes a boolean to your INI file
WriteString(Section, Key, CStr(Math.Abs(CInt(Value))))
Flush()
End Sub
'Guarda los cambios de la caché en fichero INI
Private Sub Flush()
FlushPrivateProfileString(0, 0, 0, strFilename)
End Sub
End Class
Artículos relacionados
- Descarga gratuita código fuente VB.Net AjpdSoft Insertar Evento Google Calendar.
- Probando Google Chrome OS o Chromium en VMware Workstation.
- Cuentas de email gratuitas con mi dominio y Google Apps.
- Conseguir un buen posicionamiento de nuestra web en los motores de búsqueda.
- Cómo instalar el navegador web Google Chrome en GNU Linux Ubuntu 10.
- Qué es Google App Engine, cómo hacer una web en Google App Engine.
- Trucos para buscar en Google.
- Instalar Visual Studio 2010 y desarrollar aplicación con acceso a PostgreSQL.
- Crear proceso en segundo plano con barra de progreso en Visual Basic .Net VB.Net.
- El control de errores en Visual Basic .Net.
- Acceso a MySQL mediante Visual Basic .Net y ODBC.
- Acceso a Oracle mediante Microsoft Visual Basic, RDO y ODBC.
- Insertar y extraer documentos en una tabla Oracle con Visual Basic 6.
- Artículos, manuales y trucos del Proyecto AjpdSoft sobre Microsoft Visual Studio.
- AjpdSoft Conexión BD Visual Basic .Net.
- Todos los programas con código fuente en Visual Basic.
No hay comentarios:
Publicar un comentario