Documente Academic
Documente Profesional
Documente Cultură
Por supuesto que lo mejor es utilizar las Api de windows para el registro, pero si lo que queremos hacer no es muy complicado, mediante esta dll, nos olvidamos de complicarnos la vida utilizando el Api. Nota: En el proyecto de ejemplo que viene con la descarga, se listan todas las entras de la siguiente clave del registro (las aplicaciones que se inician con windows) que se encuentran en la siguiente rama HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run Tambin si quers ver un ejemplo para poder acceder al registro usando Windows Scripting Host, en este enlace se muestra como hacerlo Tutorial simple de Windows Scripting Host
Vb SendMail
Esta Dll Freeware llamada vbSendMail utiliza el componente Winsock, y permite Enviar correo desde Visual basic y contiene bastantes opciones Viene con un ejemplo y con el cdigo fuente incluido: Algunas de las caractersticas y opciones que implementa la DLL
Enviar correo en formato HTML Enviar archivos adjuntos Validar direccin de email Codificacin de caracteres Mtodo para obtener la direccin IP de un host Indicar el tiempo de espera de envo Mtodo para Realizar un Ping a un dominio Establecer propioridad Usar autentificacin Evento de progreso para el envo Evento para capturar errores Evento para recuperar informacin del estado actual del envo.
Nota: en el archivo de descarga, ya est generado el ejecutable para probarlo. Antes registrar la Dll en el sistema con el comando Regsvr32 desde la lnea de comandos de windows. Nota sobre Archivos adjuntos: Para enviar varios archivos adjuntos, las rutas se deben separar con un punto y coma, por ejemplo: poSendMail.Attachment = "c:\archivo1.zip;c:\archivo2.zip;c:\archivo3.zip"
Este ejemplo muy simple muestra como enviar un Mail utilizando el componente MapiSession y MapiMessages.
Para agregar estos ocx se debe insertar desde Componentes bajo el nombre de Microsoft Mapi controls.
Para el ejemplo agregar estos 2 Ocx al formulario ( MapiSession y MapiMessages ) y tambin agregar los siguientes controles, mas o menos como muestra la imagen:
Un TextBox llamado txtdestinatario ( Email de destino ) Un textbox llamado txtasunto ( El asunto del mail ) Un text txtMensaje Un control Commondialog (para buscar un archivo adjunto) 2 Controles CommandButton. CmdAdjunto y CmdEnviar Un control Label llamado LblAdjunto (para mostrar la ruta del archivo a enviar)
Cdigo fuente en el formulario Texto planoImprimir 1. Private Sub cmdAdjunto_Click() 2. 3. 'Para el archivo adjunto del Mail 4. With CommonDialog1 5. 6. .ShowOpen 7. 8. If .FileName = "" Then 9. Exit Sub 10. End If 11. 12. lblAdjunto = .FileName 13. 14. End With 15. 16. End Sub 17. 18. Private Sub CmdEnviar_Click() 19. 20. 'Borramos la ruta 21. lblAdjunto = ""
22. 23. With MAPISession1 24. .NewSession = False 25. .SignOn 26. End With 27. 28. With MAPIMessages1 29. .SessionID = MAPISession1.SessionID 30. ' Creamos el mensaje 31. .Compose 32. 33. ' Asunto del mensaje 34. .MsgSubject = txtasunto 35. 36. ' Mensaje 37. .MsgNoteText = txtMensaje 38. 39. ' Nombre del Mail del destinatario 40. .RecipDisplayName = txtdestinatario 41. 42. ' Archivo Adjunto 43. If lblAdjunto <> "" Then 44. .AttachmentPathName = lblAdjunto 45. End If 46. 47. ' Enviamos el correo 48. .Send False 49. 50. End With 51. 52. ' Cerramos la sesin abierta del Mapi 53. MAPISession1.SignOff 54. 55. End Sub 56. 57. 58. Private Sub Form_Load() 59. Me.Caption = " Enviar Email con Mapi " 60. cmdAdjunto.Caption = " Adjuntar archivo " 61. CmdEnviar.Caption = " Enviar mail " 62. End Sub
Componente Activex que permite leer y recibir email en visual basic y otros entornos de programacin
Este Componente se llama POP3 Component y es desarrollado por la empresa Ostro Soft. El componente es una dll Activex que permite utilizarla desde visual basic 4, 5, 6.0 , y tambin en la plataforma .Net , en visual basic c++, Delphi , lenguajes de Script como vbscipt, Javascript, y otros que soporten COM , para poder leer y recibir mensajes de email desde un servidor POP3 Esta es una captura de un ejemplo para usarlo desde visual basic. En el control ListView, al conectarse al servidor de email , lista los mensajes de la cuenta indicada : y tiene las opciones: ( ver el mensaje, ver cabeceras, eliminar el mensaje seleccionado y una ventana de estado )
Luego el proyecto , tambin tiene otro formulario que contiene un control treeview que visualiza los datos del mail elegido en el ListView , los datos son : la fecha , el asunto, la direccin , el mensaje, el mensaje en formato Html, los archivos adjuntos, las cabeceras o headers etc...
Nota: para instalar la dll , copiar el archivo OSPOP3.dll en el directorio de sistema y tambin registrarlo desde la linea de comandos con el programa regsvr32 "regsvr32 OSPOP3.dll"
Desde la pgina de Ostro Soft, pods descargar el Zip completo, con los dems ejemplos: para vbScript, vb.Net, vba, csharp, asp.net y asp. Adems, desde esa misma pgina, al final de todo, hay una breve explicacin con todos los mtodos , propiedades, objetos y eventos que tiene el Activex Tambin, pods descargar desde dicha web, un componente para manejar SMTP y poder realizar envos de mail , en visual basic y otros entornos de programacin ( incluye ejemplos ) . Ir a la web
Nota: en los archivos zip con los ejemplos , se incluye un archivo txt llamado pop3_errors con los nmeros de error de retorno del componente activex asi como tambin la descripcin de los mismos.
Control muy simple que utiliza el control Winsock para leer correo y que se coloca en la barra systray
Nota: en este enlace, pods ver un Activex para conectar a un servidor pop3 y poder leer y recibir emaily es bastante completo : pop3 Component
Este ocx utiliza un control Winsock para chequear y verificar si hay nuevo correo en una cuenta. El mismo se coloca en la barra tray y mediante un cono animado avisa si hay un nuevo mail. Permite configurar el intervalo o tiempo en el que leer desde el servidor si hay un nuevo mensaje . Tambin graba en el registro los datos ingresados de la cuenta a la que se lee , es decir el Nombre de usuario, el Password y el servidor de correo utilizado, de esta menera cuando cerremos el programa y volvamos a iniciarlo leer los datos guardados en el registro y directamente se notificar en la barra tray utilizando esa configuracin
Nota: Al final de la pgina , hay otros ejemplos para poder leer y enviar correo con diferentes componentes
Cdigo fuente en el formulario Texto planoImprimir 1. Option Explicit 2. 3. 4. Private m_Sleep As Boolean 5. Private Estado As String 6. 7. 8. ' Rutina que enva el correo mediante el Winsock 9. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 10. 11. 12. Private Sub Winsock_mail(Smtp_Server As String, _ 13. Name_From As String, _ 14. Mail_From As String, _ 15. Name_To As String, _ 16. Mail_to As String, _ 17. Asunto_Mensaje As String, _ 18. Mensaje As String) 19. 20. On Error GoTo Err_Sub 21. 22. Estado = vbNullString 23. ProgressBar1.Max = 4 24. ProgressBar1.Value = 0 25. 26. 27. With Winsock1 28. 29. ' cierra el winsock 30. .Close 31. ' conecta al servidor en el puerto 25 32. .Connect Smtp_Server, "25" 33. 34. ' Bucle mientras conecta al Smtp
35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90.
Do While .State <> sckConnected DoEvents If .State = sckClosed Or .State = sckError Then MsgBox "Error ", vbCritical Desconectar Exit Sub End If Loop ' almcena el texto del estado del envio Estado = Estado & "Conectado a " & Smtp_Server & "." & vbCrLf
Do While m_Sleep = False DoEvents Loop ' Envia los datos del remitente .SendData "MAIL FROM: " & Mail_From & vbCrLf ' texto de estado Estado = Estado & "MAIL FROM: " & Mail_From & vbCrLf Do While ProgressBar1.Value <> 1 DoEvents Loop ' Envia los datos del destinatario .SendData "RCPT TO: " & Mail_to & vbCrLf ' texto de estado Estado = Estado & "RCPT TO: " & Mail_to & vbCrLf ' espera Do While ProgressBar1.Value <> 2 DoEvents Loop ' ac se enva el mail .SendData "DATA" & vbCrLf Estado = Estado & "DATA" & vbCrLf Do While ProgressBar1.Value <> 3 DoEvents Loop
.SendData "FROM: " & Name_From & " <" & Mail_From & ">" & vbCrLf .SendData "TO: " & Name_To & " <" & Mail_to & ">" & vbCrLf .SendData "SUBJECT: " & Asunto_Mensaje & vbCrLf .SendData vbCrLf .SendData Mensaje & vbCrLf Estado = Estado & Mensaje & vbCrLf
91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146.
.SendData vbCrLf & "." & vbCrLf Estado = Estado & vbCrLf & "." & vbCrLf Do While ProgressBar1.Value <> 4 DoEvents Loop ' Enva el comando de cierre .SendData "QUIT" & vbCrLf ' cierra la conexin del winsock .Close ' muestra el mensaje de estado ( se puede _ mostrar en un textbox multilinea ) MsgBox Estado, vbInformation ProgressBar1.Value = 0 End With Exit Sub Err_Sub: ' Si hay error muestra el mensaje y cierra el socket Winsock1.Close MsgBox Err.Description, vbCritical End Sub
Private Sub Desconectar() 'Cierra el Winsock Winsock1.Close End Sub ' Botn que enva el e-mail ''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Sub Command1_Click() Winsock_mail txt_Server_Smtp, _ txt_nameFrom, _ txt_emailFrom, _ txt_NameTo, _ txt_MailTo, _ txt_Asunto, _ txt_Mensaje End Sub ' Botn que Finaliza el socket abierto ''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Sub Command2_Click() Call Desconectar
147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183.
End Sub
' este evento recibe los datos de respuesta del servidor Smtp _ para poder almacenar el texto del estado de la operacion de envo _ y mostrar el progreso en el progressbar '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim Data As String 'Datos ' Retorno del Winsock Dim ret As String ' recupera los datos Winsock1.GetData Data ' formatea ret = Mid(Data, 1, 3) Estado = Estado & Data & vbCrLf Select Case ret Case 250 ProgressBar1.Value = ProgressBar1.Value + 1 Case 354 ProgressBar1.Value = ProgressBar1.Value + 1 Case 220 m_Sleep = True End Select End Sub Private Sub Form_Load() Command1.Caption = " Enviar " Command2.Caption = " Desconectar " Me.Caption = "Envo de email con el control Winsock " End Sub
Leer los correos de un Pop3 con el winsock y guardar los mensajes en disco como archivos EML
Este ejemplo se conecta a un Pop3, y obtiene todos los mail y los lista en un ListBox. Luego escribe el contenido del mail y lo guarda como archivo .Eml en el App.path En el formulario agregar un control Winsock llamado Winsock1. Un control Listbox y un CommandButon A al procedimiento LeerMail, pasarle como parmetro el nombre del servidor pop3, la cuenta, el password y el puerto Texto planoImprimir
1. Dim Recibido As Boolean 2. Dim Mensaje As String 3. Dim sckError 4. 5. 6. Private Sub Command1_Click() 7. ' por ejemplo : 8. ' Call Leer("pop3.dominio.com", 110, "cuenta@dominio.com", "password") 9. End Sub 10. 11. ' se reciben los datos 12. '''''''''''''''''''''''''''' 13. Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) 14. 15. Winsock1.GetData Mensaje 16. 17. Select Case Winsock1.Tag 18. Case "RETR" 19. ' escribe en disco el archivo eml 20. Put #1, , Mensaje 21. 22. If InStr(Mensaje, vbLf + "." + vbCrLf) Then 23. Close 1 24. Recibido = True 25. End If 26. 27. Case Else 28. sckError = (Left$(Mensaje, 3) = "-ER") 29. Recibido = True 30. End Select 31. End Sub 32. 33. Private Sub Winsock1_Close() 34. Winsock1.Close 35. End Sub 36. 37. Private Sub Leer(Pop3 As String, _ 38. Puerto As Integer, _ 39. Cuenta As String, _ 40. Password As String) 41. 42. 43. ' Conecta con el Pop3 44. Winsock1.Connect Pop3, Puerto 45. 46. Do Until Recibido 47. DoEvents 48. Loop 49. 50. If sckError Then 51. MsgBox "Error al conectar con el servidor Pop3", vbCritical 52. Exit Sub 53. End If 54. 55. ' usuario 56. SendCommand "USER " & Cuenta
57. 58. If sckError Then 59. MsgBox "Error con el nombre de usuario ", vbCritical 60. Exit Sub 61. End If 62. 63. ' Enva el passowrd 64. SendCommand "PASS " & Password 65. 66. If sckError Then 67. MsgBox "Password incorrecto", vbCritical 68. Exit Sub 69. End If 70. 71. ' Get Number of Messages and total size in bytes 72. SendCommand "STAT" 73. x = InStr(Mensaje, " ") 74. b = InStrRev(Mensaje, " ") 75. Messages = Val(Mid$(Mensaje, x + 1, b - x)) 76. 77. ' Recorre la cantidad de mensajes 78. For i = 1 To Messages 79. 80. Winsock1.Tag = "RETR" 81. 'crea un archivo 82. Open App.Path & "\eMail-" & i & ".eml" For Binary Access Write As #1 83. 84. Call SendCommand("RETR " & i) 85. List1.AddItem "eMail " & i 86. Next 87. 88. Winsock1.Tag = "" 89. End Sub 90. 91. Sub SendCommand(Comando As String) 92. Winsock1.SendData Comando + vbCrLf 93. 94. Recibido = False 95. Do Until Recibido 96. DoEvents 97. Loop 98. End Sub
El ejemplo que est en visual basic, Tiene un form principal con 6 ejemplos.
Esta Dll Tiene 3 propiedades y un mtodo que son los siguientes: 1. Usuario: Le especificamos el nombre del usuario
2. Pass: La contrasea 3. Servidor: El nombre del servidor a conectar 4. Enviar: Este es el mtodo que enva el archivo, le debemos pasar la ruta del fichero a enviar y la carpeta de destino del servidor donde se guardar Nota: Registrar la Dll en el sistema para poder usarla. Descargar Dll
Propiedades principales del ocx: 1. SMTPHostValidacion: Propiedad Opcional para validar el Host SMTP 2. ValidarEmail: Propiedad que tiene 2 valores: VALIDATE_SYNTAX y VALIDATE_NONE. que permite verificar o no si las direcciones estn correctamente establecidas 3. FromDisplayName: Opcional: texto para especificar en el campo De. si no se especifica se utiliza el correo del Remitente 4. SMTPHost: Nombre del Servidor SMTP que se utilizar para el envo 5. UsarLoginSMTP: Propiedad True/False para especificar si se utilizar Login al conectar 6. Usuario y PassWord: Propiedades requeridas si el Servidor requiere autentificacin 7. Remitente: Email del Remitente 8. Destinatario: Direccin del Destinatario 9. Asunto, Mensaje y Adjunto 10. EnviarEmail: Mtodo para enviar el correo
Eventos del control 1. SendSuccesful: Se dispara este evento cuando el correo se envo sin problemas 2. Progress: Permite visualizar el porcentaje del progreso del envo 3. SendFailed: Cuando falla se ejecuta este evento que tiene un parmetro para consultar la descripcin del posible error Descargar Ocx
104 - Utilidad para generar ejecutables con los ocx, dll y dependencias incluidas en el mismo Exe
<Volver> - Anterior - Siguiente
Al seleccionar el proyecto de vb, es decir el archivo .vbp, que previamente se deber compilar el exe desde el propio vb, se agrega como se ve en el grfico el path del fichero , en este caso prueba.exe, y el archivo de salida, que ser el programa exe final en la opcin Ouput to FileName Al agregar el ejecutable, en la otra solapa Dependencias, automticamente se visualizan los activex y dll dependientes, que en este caso en el grfico son dos, un control ocx y el Runtime del visual basic ( la librera Msvbvm60.dll )
Por ltimo al dar el botn de generar, se visualiza un grfico en la solapa Stats con el tamao del archivo final que tiene todo los componentes embebidos o fusionados. Nota: El archivo exe final adems se comprime
Descargar programa
El ejemplo que est en visual basic, Tiene un form principal con 6 ejemplos.
Contenido
Nota: el mdulo lo hice en base a estos ejemplos, ( por si los quers ver por separados) 1. Obtener ip a partir del nombre de host 2. Obtener nombre de host a partir de su ip
Descargar Dns.ocx
Esta dll activex fue programada y enviada por Cristian L., y permite mediante una seria de funciones y mtodos poder acceder al registro de windows para consultar, crear, modificar y eliminar valores del mismo entre las opciones principales
CreateKey : Crea una clave en el registro SetValueKey: Crea ( un valor ) o modifica datos Deletekey: Elimina una clave del registro DeleteValue: Elimina un valor (nombre) junto con su datos SaveKey: Guarda en un archivo la clave especificada. LoadKey: Restaura las clave, sus valores y los datos de la clave especificada. EnumKeys: Muestra todas las sub. claves que tiene una clave. EnumValue: Enumera los valores(nombres) y se respectivos datos GetValueKey: Muestra los datos que tiene un valor(nombre)
En el zip, junto a la dll, se incluye un archivo de word que explica detalladamente las funciones anteriores Nota : Registrar la dll en el sistema mediante el comando Regsvr32
Descargar ejemplo
Descargar regModBas
Relacionados
Mdulo de clase para acceder al registro. ( Leer y escribir datos ) Cargar y visualizar ramas del registro en un Treeview
Ejemplo que permite crear, eliminar, consultar datos del registro de windows mediante el Api
Este mdulo tiene cinco funciones que son las siguientes: CrearNuevaClave, EstablecerValor, ConsultarValor, EliminarClave y EliminarValor
Nota: el mdulo solo permite tratar datos de tipo Cadena y datos enteros Dword, para datos binarios por ejemplo no est implementado.
A continuacin sigue el cdigo a colocar en un mdulo de clase llamado Registro , y al final un ejemplo para utilizarlos desde un formulario:
Cdigo fuente en un Mdulo de clase llamado Registro Texto planoImprimir 1. Option Explicit 2. 3. 'Declaracin de constantes 4. '****************************
5. 6. 7. Private Const REG_SZ As Long = 1 8. Private Const REG_DWORD As Long = 4 9. 10. Private Const ERROR_NONE = 0 11. Private Const ERROR_BADDB = 1 12. Private Const ERROR_BADKEY = 2 13. Private Const ERROR_CANTOPEN = 3 14. Private Const ERROR_CANTREAD = 4 15. Private Const ERROR_CANTWRITE = 5 16. Private Const ERROR_OUTOFMEMORY = 6 17. Private Const ERROR_INVALID_PARAMETER = 7 18. Private Const ERROR_ACCESS_DENIED = 8 19. Private Const ERROR_INVALID_PARAMETERS = 87 20. Private Const ERROR_NO_MORE_ITEMS = 259 21. 22. Private Const KEY_ALL_ACCESS = &H3F 23. 24. Private Const REG_OPTION_NON_VOLATILE = 0 25. 26. 27. 'Declaracin de las funciones api para el registro 28. '************************************************* 29. 30. 31. Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long 32. Private Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" _ 33. (ByVal hKey As Long, _ 34. ByVal lpSubKey As String, _ 35. ByVal Reserved As Long, _ 36. ByVal lpClass As String, _ 37. ByVal dwOptions As Long, _ 38. ByVal samDesired As Long, _ 39. ByVal lpSecurityAttributes As Long, _ 40. phkResult As Long, _ 41. lpdwDisposition As Long) As Long 42. 43. Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" _ 44. (ByVal hKey As Long, _ 45. ByVal lpSubKey As String, _ 46. ByVal ulOptions As Long, _ 47. ByVal samDesired As Long, _ 48. phkResult As Long) As Long 49. 50. Private Declare Function RegQueryValueExString Lib "advapi32.dll" Alias "RegQueryValueExA" _ 51. (ByVal hKey As Long, _ 52. ByVal lpValueName As String, _ 53. ByVal lpReserved As Long, _ 54. lpType As Long, _ 55. ByVal lpData As String, _ 56. lpcbData As Long) As Long 57. 58. Private Declare Function RegQueryValueExLong Lib "advapi32.dll" Alias "RegQueryValueExA" _ 59. (ByVal hKey As Long, _ 60. ByVal lpValueName As String, _
61. ByVal lpReserved As Long, _ 62. lpType As Long, _ 63. lpData As Long, _ 64. lpcbData As Long) As Long 65. 66. Private Declare Function RegQueryValueExNULL Lib "advapi32.dll" Alias "RegQueryValueExA" _ 67. (ByVal hKey As Long, _ 68. ByVal lpValueName As String, _ 69. ByVal lpReserved As Long, _ 70. lpType As Long, _ 71. ByVal lpData As Long, _ 72. lpcbData As Long) As Long 73. 74. Private Declare Function RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExA" _ 75. (ByVal hKey As Long, _ 76. ByVal lpValueName As String, _ 77. ByVal Reserved As Long, _ 78. ByVal dwType As Long, _ 79. ByVal lpValue As String, _ 80. ByVal cbData As Long) As Long 81. Private Declare Function RegSetValueExLong Lib "advapi32.dll" Alias _ 82. "RegSetValueExA" (ByVal hKey As Long, _ 83. ByVal lpValueName As String, _ 84. ByVal Reserved As Long, _ 85. ByVal dwType As Long, _ 86. lpValue As Long, _ 87. ByVal cbData As Long) As Long 88. 89. Private Declare Function RegDeleteKey& Lib "advapi32.dll" Alias "RegDeleteKeyA" _ 90. (ByVal hKey As Long, _ 91. ByVal lpSubKey As String) 92. 93. Private Declare Function RegDeleteValue& Lib "advapi32.dll" Alias "RegDeleteValueA" _ 94. (ByVal hKey As Long, _ 95. ByVal lpValueName As String) 96. 97. 98. 'Funciones pblicas para crear, eliminar, consultar los datos 99. 100. '**************************************************************** 101. 102. 103. ' Funcin que elimina una clave especifica utilizando el Api RegDeleteKey 104. 105. Public Function EliminarClave(clave As Long, Nombre_clave As String) 106. 107. Dim ret As Long 108. 109. ret = RegDeleteKey(clave, Nombre_clave) 110. 111. End Function 112. 113. ' Funcin que elimina un dato utilizando el Api RegDeleteValue 114. 115. Public Function EliminarValor(clave As Long, _ 116. Nombre_clave As String, _
117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. ng)
Nombre_valor As String)
Dim ret As Long Dim Handle_clave As Long ' Abre la clave del registro ret = RegOpenKeyEx(clave, Nombre_clave, 0, KEY_ALL_ACCESS, Handle_clave) 'Elimina el valor del registro ret = RegDeleteValue(Handle_clave, Nombre_valor) 'Cierra la vlave del registro abierta RegCloseKey (Handle_clave) End Function ' Funcin que crea una nueva Clave utilizando el Api RegCreateKeyEx Public Function CrearNuevaClave(clave As Long, Nombre_clave As String) Dim Handle_clave As Long Dim ret As Long ret = RegCreateKeyEx(clave, _ Nombre_clave, 0&, vbNullString, _ REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, 0&, _ Handle_clave, ret) RegCloseKey (Handle_clave) End Function ' Funcin que establece un nuevo valor mediante el Api SetValueEx Public Function EstablecerValor(clave As Long, _ Nombre_clave As String, _ Nombre_valor As String, _ el_Valor As Variant, _ Tipo_Valor As Long)
Dim ret As Long Dim Handle_clave As Long ret = RegOpenKeyEx(clave, Nombre_clave, 0, KEY_ALL_ACCESS, Handle_clave) ret = SetValueEx(Handle_clave, Nombre_valor, Tipo_Valor, el_Valor) RegCloseKey (Handle_clave) End Function ' Funcin que consulta un dato del registro usando QueryValueEx Public Function ConsultarValor(clave As Long, Nombre_clave As String, Nombre_valor As Stri
172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227.
Dim Handle_clave As Long Dim valor As Variant Dim ret As Long ret = RegOpenKeyEx(clave, Nombre_clave, 0, KEY_ALL_ACCESS, Handle_clave) ret = QueryValueEx(Handle_clave, Nombre_valor, valor) ' REtorna el valor del registro a la funcin ConsultarValor = valor 'Cierra la clave abierta del registro RegCloseKey (Handle_clave) End Function
' Funciones privadas del mdulo Private Function SetValueEx(ByVal Handle_clave As Long, _ Nombre_valor As String, _ Tipo As Long, _ el_Valor As Variant) As Long Dim ret As Long Dim sValue As String Select Case Tipo ' Valor de tipo cadena Case REG_SZ sValue = el_Valor SetValueEx = RegSetValueExString(Handle_clave, _ Nombre_valor, 0&, _ Tipo, sValue, Len(sValue)) 'Valor Entero Case REG_DWORD ret = el_Valor SetValueEx = RegSetValueExLong(Handle_clave, Nombre_valor, 0&, Tipo, ret, 4) End Select End Function Private Function QueryValueEx(ByVal lhKey As Long, _ ByVal Name_Valor As String, _ el_Valor As Variant) As Long Dim cch As Long Dim lrc As Long Dim Tipo As Long Dim ret_Valor As Long Dim dato As String On Error GoTo QueryValueExError
228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260.
lrc = RegQueryValueExNULL(lhKey, Name_Valor, 0&, Tipo, 0&, cch) If lrc <> ERROR_NONE Then Error 5 Select Case Tipo Case REG_SZ: dato = String(cch, 0) lrc = RegQueryValueExString(lhKey, Name_Valor, 0&, Tipo, dato, cch) If lrc = ERROR_NONE Then el_Valor = Left$(dato, cch) Else el_Valor = Empty End If Case REG_DWORD: lrc = RegQueryValueExLong(lhKey, Name_Valor, 0&, Tipo, ret_Valor, cch) If lrc = ERROR_NONE Then el_Valor = ret_Valor Case Else lrc = -1 End Select QueryValueExExit: QueryValueEx = lrc Exit Function QueryValueExError: Resume QueryValueExExit End Function
El primer TextBox ( para especificar la Clave ) se debe llamar: txtClave El Text para especificar el Nombre del Valor : txtNameValor El otro TextBox para el Dato: txtValor Colocar cinco CommandButton: Command1 para Crear una nueva clave. Command2 para Establecer el valor. Command3 para Consultar. Command4 para eliminar una clave y Command5 para Eliminar un valor.
Cdigo fuente del formulario Texto planoImprimir 1. Private Const REG_SZ As Long = 1 2. Private Const REG_DWORD As Long = 4 3. 4. Private Const HKEY_CLASSES_ROOT = &H80000000 5. Private Const HKEY_CURRENT_USER = &H80000001 6. Private Const HKEY_LOCAL_MACHINE = &H80000002 7. Private Const HKEY_USERS = &H80000003 8. 9. 10. 11. Dim OReg As Registro 12. 13. 14. 'Crear nueva clave 15. Private Sub Command1_Click() 16. Call OReg.CrearNuevaClave(HKEY_CURRENT_USER, txtClave) 17. End Sub 18. 19. 'Establecer Valor 20. Private Sub Command2_Click() 21. Call OReg.EstablecerValor(HKEY_CURRENT_USER, _ 22. txtClave, _ 23. txtNameValor, _
24. txtValor, REG_SZ) 25. End Sub 26. 27. 'Consultar valor 28. Private Sub Command3_Click() 29. MsgBox OReg.ConsultarValor(HKEY_CURRENT_USER, txtClave, txtNameValor) 30. End Sub 31. 32. 'Eliminar Clave 33. Private Sub Command4_Click() 34. Call OReg.EliminarClave(HKEY_CURRENT_USER, txtClave) 35. End Sub 36. 37. 'Eliminar valor 38. Private Sub Command5_Click() 39. Call OReg.EliminarValor(HKEY_CURRENT_USER, txtClave, txtNameValor) 40. End Sub 41. 42. 43. 44. Private Sub Form_Load() 45. Set OReg = New Registro 46. End Sub 47. 48. Private Sub Form_Unload(Cancel As Integer) 49. Set OReg = Nothing 50. End Sub
Constantes de error
Este es un listado de las constantes de error , que se pueden implementar con los ejempos anteriores para poder saber la descripcin de un error al intentar modificar, eliminar , aadir entradas etc.. Nota: a la funcin GetRegErrorText que devuelve un string con el error, se le debe pasar como parmetro el valor de retorno en cada llamada a la funcin
Constantes Texto planoImprimir 1. 2. 3. 4. 5. 6. 7. 8. 9. Const API_SUCCESS = 0& Const ERROR_BADDB = 1009& Const ERROR_BADKEY = 1010& Const ERROR_CANTOPEN = 1011& Const ERROR_CANTREAD = 1012& Const ERROR_CANTWRITE = 1013& Const ERROR_REGISTRY_RECOVERED = 1014& Const ERROR_REGISTRY_CORRUPT = 1015& Const ERROR_REGISTRY_IO_FAILED = 1016&
10. Const ERROR_NOT_REGISTRY_FILE = 1017& 11. Const ERROR_KEY_DELETED = 1018& 12. Const ERROR_NO_LOG_SPACE = 1019& 13. Const ERROR_KEY_HAS_CHILDREN = 1020& 14. Const ERROR_CHILD_MUST_BE_VOLATILE = 1021& 15. Const ERROR_RXACT_INVALID_STATE = 1369&
Funcin Texto planoImprimir 1. Public Function GetRegErrorText(lStatus As Long) As String 2. 3. 4. Select Case lStatus 5. Case ERROR_BADDB 6. GetRegErrorText = "The configuration registry database " & _ 7. "is corrupt." 8. 9. Case ERROR_BADKEY 10. GetRegErrorText = "The configuration registry key is " & _ 11. "invalid." 12. 13. Case ERROR_CANTOPEN 14. GetRegErrorText = "The configuration registry key could " & _ 15. "not be opened." 16. 17. Case ERROR_CANTREAD 18. GetRegErrorText = "The configuration registry key could " & _ 19. "not be read." 20. 21. Case ERROR_CANTWRITE 22. GetRegErrorText = "The configuration registry key could " & _ 23. "not be written." 24. 25. Case ERROR_REGISTRY_RECOVERED 26. GetRegErrorText = "One of the files in the Registry " & _ 27. "database had to be recovered " & _ 28. "by use of a log or alternate copy. " & _ 29. "The recovery was successful." 30. 31. Case ERROR_REGISTRY_CORRUPT 32. GetRegErrorText = "The Registry is corrupt. The structure " & _ 33. "of one of the files that contains " & _ 34. "Registry data is corrupt, or the " & _ 35. "system's image of the file in memory " & _ 36. "is corrupt, or the file could not be " & _ 37. "recovered because the alternate " & _ 38. "copy or log was absent or corrupt." 39. 40. Case ERROR_REGISTRY_IO_FAILED 41. GetRegErrorText = "An I/O operation initiated by the " & _ 42. "Registry failed unrecoverably. " & _ 43. "The Registry could not read in, or " & _
44. "write out, or flush, one of the files " & _ 45. "that contain the system's image of " & _ 46. "the Registry." 47. 48. Case ERROR_NOT_REGISTRY_FILE 49. GetRegErrorText = "The system has attempted to load or " & _ 50. "restore a file into the Registry, but the " & _ 51. "specified file is not in a Registry " & _ 52. "file format." 53. 54. Case ERROR_KEY_DELETED 55. GetRegErrorText = "Illegal operation attempted on a " & _ 56. "Registry key which has been marked " & _ 57. "for deletion." 58. 59. Case ERROR_NO_LOG_SPACE 60. GetRegErrorText = "System could not allocate the required " & _ 61. "space in a Registry log." 62. 63. Case ERROR_KEY_HAS_CHILDREN 64. GetRegErrorText = "Cannot create a symbolic link in a " & _ 65. "Registry key that already " & _ 66. "has subkeys or values." 67. 68. Case ERROR_CHILD_MUST_BE_VOLATILE 69. GetRegErrorText = "Cannot create a stable subkey under a " & _ 70. "volatile parent key." 71. 72. Case ERROR_RXACT_INVALID_STATE 73. GetRegErrorText = "The transaction state of a Registry " & _ 74. "subtree is incompatible with the " & _ 75. "requested operation." 76. 77. End Select 78. 79. End Function
Active Lock
Control Activex Freeware que permite hacer que el programa tenga que ser registrado para poder utilizarlo, mediante un formulario para que los usuarios puedan registrar el producto mediante una clave Contiene un ejemplo demostrativo de como usar el control, y tambin un archivo .chm de ayuda (nslock15.chm ), que incluye ejemplos de cdigo, descripcin de las propiedades y mtodos del ocx Descargar
En las otras solapas de la pgina de propiedades del control ( Company y Product ) , se deben indicar los datos de la compaia y del producto, estos son los datos que muestra el formulario al iniciar el programa , por ejemplo como muestra este grfico
Luego, en el arranque del programa, hay que usar el mtodo Show igual que en los CommonDialog, para desplegar la pantalla Al presionar el botn "Buy" dispara el evento BuyProduct para poder realiar la accin que se requiera, es decir abrir otro formulario de compra, redirigir al sitio web etc..
Desde la pgina del autor se puede leer alguna otra informacin sobre el control : http://www.tenmilesoftware.com/index.html
Componente Activex que permite leer y recibir email en visual basic y otros entornos de programacin
Este Componente se llama POP3 Component y es desarrollado por la empresa Ostro Soft. El componente es una dll Activex que permite utilizarla desde visual basic 4, 5, 6.0 , y tambin en la plataforma .Net , en visual basic c++, Delphi , lenguajes de Script como vbscipt, Javascript, y otros que soporten COM , para poder leer y recibir mensajes de email desde un servidor POP3 Esta es una captura de un ejemplo para usarlo desde visual basic. En el control ListView, al conectarse al servidor de email , lista los mensajes de la cuenta indicada : y tiene las opciones: ( ver el mensaje, ver cabeceras, eliminar el mensaje seleccionado y una ventana de estado )
Luego el proyecto , tambin tiene otro formulario que contiene un control treeview que visualiza los datos del mail elegido en el ListView , los datos son : la fecha , el asunto, la direccin , el mensaje, el mensaje en formato Html, los archivos adjuntos, las cabeceras o headers etc...
Nota: para instalar la dll , copiar el archivo OSPOP3.dll en el directorio de sistema y tambin registrarlo desde la linea de comandos con el programa regsvr32 "regsvr32 OSPOP3.dll"
Desde la pgina de Ostro Soft, pods descargar el Zip completo, con los dems ejemplos: para vbScript, vb.Net, vba, csharp, asp.net y asp. Adems, desde esa misma pgina, al final de todo, hay una breve explicacin con todos los mtodos , propiedades, objetos y eventos que tiene el Activex Tambin, pods descargar desde dicha web, un componente para manejar SMTP y poder realizar envos de mail , en visual basic y otros entornos de programacin ( incluye ejemplos ) . Ir a la web
Nota: en los archivos zip con los ejemplos , se incluye un archivo txt llamado pop3_errors con los nmeros de error de retorno del componente activex asi como tambin la descripcin de los mismos.
Dll que permite desplegar una grilla junto a un control asociado, para poder seleccionar un valor de la misma
Esta dll , que utiliza la referencia a Ado y un MsHFlexGrid, se asocia a un control textBox o combo, para poder desplegar junto a este, un grid con los datos de una base de datos y poder obtener el valor seleccionado para asignarlo por ejemplo a otros controles o realizar otras acciones.
Por ejemplo , como se ve en esta imagen , en el que se despliega junto a un Text1, cuando el Text recibe el foco o se presiona una tecla de acceso, en este caso F9
En este otro caso, se despliega junto al text2 al presionar el commandbutton que est al costado
El grid ( en la parte inferior ) tambin tiene un caja de texto para poder filtrar los datos en la grilla tomando en cuenta el primer campo Para poder usar la Dll y conectarla a una base de datos para traer el conjunto de registros, se le debe indicar los siguientes datos 1. La cadena de conexin a utilizar ( propiedad ConnectionString ) 2. EL comand Sql o la tabla ( propiedad recordsource) 3. La dll debe estar declarada con Withevents para poder disparar los eventos que permiten obtener y consultar los datos Por ejemplo :
Private Sub Form_Load() Dim PathBd As String ' ruta a la base de datos PathBd = "C:\Archivos de programa\" & _ "Microsoft Visual Studio\VB98\biblio.mdb" ' nueva instancia de la dll ( clase ListOfValues ) Set GridDesplegable = New ListOfValues ' cadena de conexin a usar GridDesplegable.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=" & PathBd _ & ";Persist Security Info=False"
End Sub
Luego, por ejemplo para desplegarla junto a un combo , se debe indicar el Recordsource y luego llamar al mtodo OpenList indicndole el control enlazado como parmetro
GridDesplegable.RecordSource = "Select * From Una Tabla" ' despliega el grid, pasndole como parmetro el control asociado Call GridDesplegable.OpenList(Combo1)
Para poder capturar los datos, tiene dos eventos : AfterListClose y BeforeListOpen. El primer ocurre luego de seleccionar el valor de la grilla, el segundo antes de que se despliegue Por ejemplo para capturar los datos en el evento AfterListClose
Private Sub GridDesplegable_AfterListClose(BuddyControl As Object, _ Results As Collection) ' Verifica si no hubo error ... If GridDesplegable.IsSuccess Then ' selecciona el control enlazado ya que puede haber varios Select Case BuddyControl.Name Case Text1.Name ' Muestra los valores, indicando el campo MsgBox Results("Campo1") MsgBox Results("Campo2") End Select End If End Sub
Autor : Abdul Gafur Descargar Dll ListOfValues Descargar cdigo fuente de la Dll
Nota: si no dispons de ningn editor web para crear las coordenadas de la imagen, es decir para crear el mapeado de tu grfico , pods probar algunas herramientas gratuitas que sirven especificamente para esto. Buscando en google u otro buscador encontrars varias webs para descargarlas Algunos nombres de estas aplicaciones : 1. 2. 3. 4. MapMaker32 TS Imagemapper Automata web Hotspots CoolMap 3.0
Para mas informacin leer el archivo readme.html que se adjunta en el zip , que contiene los detalles del activex, y las instrucciones para poder instalarlo
Descargar
Actualizado : aparentemente el archivo dll del zip anterior est daado o corrupto. Desde este enalce , se puede descargar , la libreria con el cdigo fuente incluido. Tambin incluye el archivo libmySQL.dll Este proyecto tiene un ejemplo para conectar al servidor, y realizar algunas operaciones : Ejecutar consultas, listar tablas etc.. El cdigo fuente es open source y el autor del mismo es Jim Banasiak Descargar
Sacado de http://www.recursosvisualbasic.com.ar/
msresize.zip 54 Kb Control dar tamao a todos los controles de un formulario automticamente sin necesidad de usar cdigo. Es shareware.
Sacado de: http://www.canalvisualbasic.net