APUNTES Macros Excel, Java, Vbnet

54
Operaciones básicas con archivo y carpetas 10/11/2012 by Fernando Santos | 0 comments A menudo se debe comprobar si una hoja de cálculo, archivo o carpeta existe, o si un determinado archivo está actualmente abierto. Usted también podría tener que eliminar un archivo. También se puede comprobar si un archivo o una carpeta existe. El uso de macros con el aplicativo VBA de Visual Basic proporciona una herramienta basada en objetos para trabajar con carpetas y archivos. De esta forma se puede facilitar las cosas a través de una macro en el uso diario. A continuación se muestra algunos ejemplos básicos con archivos y carpetas. EJEMPLOS: 1. VISUALIZAR LA UBICACIÓN DEL ARCHIVO EXCEL ACTUAL Se puede hacer esta operación con la creación de la siguiente macro: MsgBox “Ubicacion de archivo: ” & CurDir Otra forma de mostrar está misma operación es a través de controles Activex que se insertan en la hoja de cálculo. Esta operación se puede visualizar en la siguiente imagen. - En la hoja de cálculo, insertamos el botón de comando

Transcript of APUNTES Macros Excel, Java, Vbnet

Page 1: APUNTES Macros Excel, Java, Vbnet

Operaciones básicas con archivo y carpetas10/11/2012 by Fernando Santos | 0 comments

A menudo se debe comprobar si una hoja de cálculo, archivo o carpeta existe, o si un determinado archivo está actualmente abierto. Usted también podría tener que eliminar un archivo. También se puede comprobar si un archivo o una carpeta existe. El uso de macros con el aplicativo VBA de Visual Basic proporciona una herramienta basada en objetos para trabajar con carpetas y archivos. De esta forma se puede facilitar las cosas a través de una macro en el uso diario. A continuación se muestra algunos ejemplos básicos con archivos y carpetas.

EJEMPLOS:

1. VISUALIZAR LA UBICACIÓN DEL ARCHIVO EXCEL ACTUAL

Se puede hacer esta operación con la creación de la siguiente macro:

MsgBox “Ubicacion de archivo: ” & CurDir

Otra forma de mostrar está misma operación es a través de controles Activex que se insertan en la hoja de cálculo. Esta operación se puede visualizar en la siguiente imagen.

- En la hoja de cálculo, insertamos el botón de comando

Page 2: APUNTES Macros Excel, Java, Vbnet

- Al hacer click izquierdo sobre el botón, nos muestra la ventana del aplicativo VBA en el cual se digita  MsgBox “Ubicacion de archivo: ” & CurDir.

- Finalmente en la hoja de cálculo se hace click izquierdo sobre el botón y nos muestra el siguiente mensaje.

2. CAMBIAR LA UBICACIÓN ACTUAL DE “D” AL DISCO C:

De la misma forma que la operación anterior se puede crear la siguiente macro:

Page 3: APUNTES Macros Excel, Java, Vbnet

ChDrive “C”

MsgBox “Ubicacion de archivo: ” & CurDir

También se puede crear el botón de comando de controles Activex y seguir el mismo proceso del ejemplo anterior.

3. BORRAR UN ARCHIVO

Se crea una macro con el siguiente código VBA, especificando la ubicación exacta en el que se encuentra el archivo. Luego se ejecuta y el archivo con la ruta especificada será eliminado.

Kill “D:PUCPCURSO – MACROSNueva carpetaclase2.xlsx”

 4. CREAR UNA CARPETA

- Para crear una carpeta en la ubicación actual en la que se encuentra el archivo Excel se sigue el siguiente código en VBA en macros.

MkDir “Ricard”

- Para crear una nueva carpeta en una ubicación específica, se crea el siguiente macro.

MkDir “D:PUCPCURSO – MACROSNueva Carpeta”

y luego se ejecuta.

5. COPIAR UN ARCHIVO A OTRA CARPETA

Para copiar un archivo Excel a otra carpeta que se encuentra en un disco distinto a su ubicación actual se ejecuta una macro con el siguiente código VBA.

FileCopy “D:PUCPCURSO – MACROSClase_2b.xlsm”, “E:TSW”

Elaborado por: Ricardo Najarro Chuchón

Ejemplos de operaciones básicas

Como enviar un archivo a un servidor FTP en VB.Net lunes, 21 de junio de 2010

Page 4: APUNTES Macros Excel, Java, Vbnet

Categoria: FTP

El asunto es este: nos encargan una aplicacion o un modulo, dentro de nuestro sistema principal, en la cual se pueda enviar y recepcionar archivos (documentos o lo que sea) en la cuales se contiene informacion importante para la empresa para uno o varios usuarios a los cuales ira dirigido justamente el archivo. Para esto tendra en cuenta lo sieguiente:

* Contar con una PC o Servidor FTP donde se almacenaran y se tendran acceso desde cualquier punto del planeta y en cualquier momento a los archivos.* Contar con los campos adecuados en una tabla de nuestra BD que indique el codigo del usuario, nombre del archivo (ejemplo.doc) etc.* Contar con una buena linea de internet

Ojo que aca ya no voy a detallar que codigo utilizar en vb.net y en SQL Server para guardar los parametros en la BD de los campos mencionados, porque eso estara definido por cada programador, solo mostrare un ejemplo de como enviar un archivo del FTP:

Codigo:

Donde OrigenArchivo podria ser "c:\ejemplo.doc" y NombreArchivo podria ser "Archiv0_0001.doc", pues yo les recomiendo usar un correlativo al momento de asignar el nombre al archivo en el server FTP ya que podria ocacionar error si el enviamos con un nombre que de un archivo que ya existe en la carpeta de destino creado en el server FTP, eh ahi la importancia de guardar el datos del nombre (ejemplo.doc) para que cuando recepcionemos o descarguemos el archivo se guarde en el disco local con el nombre original.

Public Shared Sub EnviarArchivoFTP(ByVal OrigenArchivo As String, ByVal NombreArchivo As String)

Dim clsRequest As System.Net.FtpWebRequest

Dim conexion As Net.Sockets.TcpClient

clsRequest = DirectCast(System.Net.WebRequest.Create("ftp://xxx.xx.xxx.xxx/archivos/NombreArchivo), System.Net.FtpWebRequest)

clsRequest.Proxy = Nothing ' Esta asignación es importantisimo con los que trabajen en windows XP ya que por defecto esta propiedad esta para ser asignado a un servidor http lo cual ocacionaria un error si deseamos conectarnos con un FTP, en windows Vista y el Seven no tube este problema.

clsRequest.Credentials = New System.Net.NetworkCredential("usuario", "password") ' Usuario y password de acceso al server FTP, si no tubiese, dejar entre comillas, osea ""

clsRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile

Page 5: APUNTES Macros Excel, Java, Vbnet

Try

Dim bFile() As Byte = System.IO.File.ReadAllBytes(origenArchivo)

Dim clsStream As System.IO.Stream = _

clsRequest.GetRequestStream()

clsStream.Write(bFile, 0, bFile.Length)

clsStream.Close()

clsStream.Dispose()

Catch ex As Exception

MsgBox(ex.Message & ". El Archivo no pudo ser enviado, intente en otro momento")

End Try

End Sub

Instrucciones

1. 1

Inicia Microsoft Visual Basic Express. Haz clic en "Nuevo proyecto..." en el panel izquierdo de la pantalla y, a continuación, selecciona "Aplicación de formularios de Windows". Haz clic en "Aceptar".

2. 2

Haz doble clic en "Timer" en el panel "Herramientas" para agregar un nuevo control de temporizador. Haz clic en "Timer1" y, a continuación, selecciona "Propiedades". Junto a "Habilitado", selecciona "Verdadero". Haz doble clic en "Timer1" para abrir la ventana de "Form1.vb".

3. 3

Escribe el siguiente código por encima de "Timer1_Tick" para declarar la función de "GetAsyncKeystate": Public Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Int32) As UShort

4. 4

Page 6: APUNTES Macros Excel, Java, Vbnet

Escribe el siguiente código bajo "Timer1_Tick" para capturar las teclas pulsadas mientras se ejecuta la aplicación: Dim keyResult As Integer Dim chrKey As String Dim i As Integer For i = 2 To 90 keyResult = 0 keyResult = GetAsyncKeystate(i) If keyResult = -32767 Then chrKey = Chr(i) MsgBox(chrKey) Exit For End If Next i

5. 5

Presiona "F5" para ejecutar el programa, luego presiona "B" en el teclado y verás un recuadro de mensaje que se muestra con la letra "B".

FTP upload con vb.net – FtpWebRequestby Pablo Cornehl · 12/02/2012

Si bien vb.net ya trae una clase de ftp para uso simple aveces no es lo suficientemente poderosa o no alcanza nuestros requerimientos para lo que deseamos hacer.

Muchas veces se desea tener una barra de progreso para conocer cuanto le queda a nuestra descarga o subida para terminar y es algo complicado para el usuario no experimentado. Más allá de eso vb.net permite de forma sencilla mostrar el progreso de nuestras subidas habilitando la interfaz ui del método UploadFile.

1My.Computer.Network.UploadFile("C:\readme.txt",

"ftp://ftp.server.com",New NetworkCredential(Username, Password), true)

Como se puede observar el cuarto argumento del método corresponde a habilitar o no la interfaz de carga donde se muestra el nombre de archivo que se esta subiendo, una barra de progreso y el botón cancelar. Lamentablemente no se puede tener acceso a esos controles para modificarlos y obtener información de ellos por lo que estamos muy limitados.

Con FtpWebRequest las cosas se puede hacer un poco más “modulares” dado que tenemos total control sobre lo que enviamos y de la forma en la que lo enviamos, pero también las cosas se pueden complicar un poco.

1

2

3

Dim request As FtpWebRequest = WebRequest.Create(New Uri("ftp://ftp.server.com/readme.txt"))

request.Method = WebRequestMethods.Ftp.UploadFile

request.Credentials = New NetworkCredential("username", "password")

Page 7: APUNTES Macros Excel, Java, Vbnet

Lo primero que hacemos es iniciar la clase y crear un request a la url provista. Si bien puede ser un string simple siempre es recomendado pasar un uri para asegurarnos que es valido si es que un usuario lo ah introducido manualmente.

Note que la url contiene el nombre de archivo que se va a subir, de esta manera se le indica al servidor sobre que archivo deseamos trabajar.

Por ultimo se indica el método de conexión y las credenciales que albergan el nombre de usuario y la contraseña para conectarse.

1

2

3

4

Dim fileStream() As Byte = System.IO.File.ReadAllBytes("C:\readme.txt")

Dim requestStream As System.IO.Stream = request.GetRequestStream()

requestStream.Write(fileStream, 0, fileStream.Length)

Una vez conectados lo que necesitamos es leer todos los bytes del archivo que deseamos subir y enviarlos a través del stream de transmisión.

Enviar los archivos de esta manera en vez de usando el método UploadFile de la clase Network nos permite poder controlar la subida de forma mas eficiente y así en un futuro enviar los datos en paquetes de bytes para medir el progreso e inclusive la velocidad de transmisión y tiempo estimado de subida.

1

2

requestStream.Close()

requestStream.Dispose()

Y finalmente le decimos al garbage collector que ya no usaremos el stream de datos y liberamos la memoria utilizada.

Nuestro código final queda así:

01

02

03

04

05

Dim request As FtpWebRequest = WebRequest.Create(New Uri("ftp://ftp.server.com/readme.txt"))

request.Method = WebRequestMethods.Ftp.UploadFile

request.Credentials = New NetworkCredential("username", "password")

Dim fileStream() As Byte = System.IO.File.ReadAllBytes("C:\readme.txt")

Page 8: APUNTES Macros Excel, Java, Vbnet

06

07

08

09

10

11

Dim requestStream As System.IO.Stream = request.GetRequestStream()

requestStream.Write(fileStream, 0, fileStream.Length)

requestStream.Close()

requestStream.Dispose()

Abrir, Editar Y Guardar Un TextBox A Un Fichero TxT [Vb.Net]Publicado el 31 octubre, 2011 por Luis Bautista

Bueno Ahora Un ejemplo Para Abrir Un Archivo Editarlo Guardarlo.

Primero Que Nada Necesitamos Los Siguientes Controles:

3 Buttonso 1 Button Donde Buscaremos El Fichero TXT A Abriro 1 Button Para guardar Los Cambios Hechos En El Ficheroo 1 Button Para Guardar Un Nuevo Fichero

1 Labelo 1 Label Para Almacenar La Ruta Del Fichero

1 Textboxo 1 TextBox Donde Nos Mostrara El Contenido Del Fichero Y Podremos

Editar 1 OpenFileDialog

o 1 OpenFileDialog Nos Mostrara Un Cuadro De Dialogo Donde Buscaremos Y Seleccionaremos El Fichero

1 SaveFileDialogo 1 SaveFileDialog Nos mostrara Un Cuadro De Dialogo Donde Buscaremos

La Dirección Donde Deseamos Guardar El Fichero.

Haremos Un Diseño Algo Parececido Asi:

Page 9: APUNTES Macros Excel, Java, Vbnet

Espero Que Les Guste Mi Modelo!! :D

El Código Fuente:

123456789101112131415161718

Imports System.IOPublic Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click With OpenFileDialog1 .Filter = "Ficheros de texto (*.txt)|*.txt" If .ShowDialog = Windows.Forms.DialogResult.OK Then Label1.Text = OpenFileDialog1.FileName TextBox1.Text = AbrirArchivo(Label1.Text) End If End With End Sub Public Function AbrirArchivo(ByVal Ruta As String) Dim objReader As New StreamReader(Ruta) Dim sLine As String = "" Dim Texto As String = "" Dim arrText As New ArrayList() Do sLine = objReader.ReadLine() If Not sLine Is Nothing Then arrText.Add(sLine + vbCrLf) End If

Page 10: APUNTES Macros Excel, Java, Vbnet

192021222324252627282930313233343536373839404142434445464748495051525354555657

 Loop Until sLine Is Nothing objReader.Close() For Each sLine In arrText Texto += sLine Next Return Texto End Function

 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click If Not Len(TextBox1.Text) = 0 Then With SaveFileDialog1 .Reset() .Filter = "Ficheros de texto (*.txt)|*.txt" If .ShowDialog = Windows.Forms.DialogResult.OK Then If My.Computer.FileSystem.FileExists(.FileName) Then My.Computer.FileSystem.DeleteFile(.FileName) My.Computer.FileSystem.WriteAllText(.FileName, TextBox1.Text & vbCrLf, True) Else My.Computer.FileSystem.WriteAllText(.FileName, TextBox1.Text & vbCrLf, True) End If Label1.Text = .FileName End If End With End If End Sub

 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click If Not Len(Label1.Text) = 0 Then 'Para Guardar Una Manera Sencilla Es Eliminar Y Crearlo ' Lo Eliminamos My.Computer.FileSystem.DeleteFile(Label1.Text) ' Lo Creamos My.Computer.FileSystem.WriteAllText(Label1.Text, TextBox1.Text & vbCrLf, True) End If End SubEnd Class

Video De Muestra:

Ahora Pueden Comentar y Sugerir Mas Ejemplos Espero Que Les Haya Servido En Algo ¡!

Page 11: APUNTES Macros Excel, Java, Vbnet

Detección de la inserción de unidades de disco extraíbles con .NETMartes, 5 junio, 2007 — Antonius

Para los aficionados al desarrollo de aplicaciones con .NET y C#, aquí voy a dejar un trozo de código muy interesante.

Básicamente consiste en un método para notificar a una aplicación de que se ha insertado un nuevo disco en el sistema (un CD, DVD, llave USB, tarjeta de memoria SD/MMC/etc, Disco duro externo, …), un método para identificar la letra de la nueva unidad, y a partir de ellos construir las aplicaciones que se nos ocurran que puedan aprovecharse de esta funcionalidad.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

//Incluir esto es obligatorio

using System.Runtime.InteropServices;

/*

 * Escribe aquí el código de tu programa (¡O donde prefieras!)…

 */

//Estructura de datos que almacena la gestión de conexiones

[StructLayout(LayoutKind.Sequential)]

public struct DEV_BROADCAST_VOLUME

{

    public int dbcv_size;

    public int dbcv_devicetype;

    public int dbcv_reserved;

    public int dbcv_unitmask;

}

//Método a sobreescribir para gestionar la llegada de nuevas unidades de disco

Page 12: APUNTES Macros Excel, Java, Vbnet

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

3

protected override void WndProc(ref Message m)

{

    //Estas definiciones están en dbt.h y winuser.h

    //Se ha producido un cambio en los dispositivos

    const int WM_DEVICECHANGE = 0×0219;

    // El sistema detecta un nuevo dispositivo

    const int DBT_DEVICEARRIVAL = 0×8000;

    //Solicita retirada del dispositivo

    const int DBT_DEVICEQUERYREMOVE = 0×8001;

    //Ha fallado la retirada del dispositivo

    const int DBT_DEVICEQUERYREMOVEFAILED = 0×8002;

    //Pendiente extracción del dispositivo

    const int DBT_DEVICEREMOVEPENDING = 0×8003;

    //Dispositivo extraído del sistema

    const int DBT_DEVICEREMOVECOMPLETE = 0×8004;

    // Volumen lógico (Se ha insertado un disco)

    const int DBT_DEVTYP_VOLUME = 0×00000002;

    switch (m.Msg)

    {

        //Cambian los dispositivos del sistema

        case WM_DEVICECHANGE:

        switch (m.WParam.ToInt32())

        {

            //Llegada de un dispositivo

            case DBT_DEVICEARRIVAL:

            {

                int devType = Marshal.ReadInt32(m.LParam, 4);

                //Si es un volumen lógico..(unidad de disco)

Page 13: APUNTES Macros Excel, Java, Vbnet

1

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

                if (devType == DBT_DEVTYP_VOLUME)

                {

                    DEV_BROADCAST_VOLUME vol;

                    vol = (DEV_BROADCAST_VOLUME)Marshal.PtrToStructure(

                        m.LParam, typeof(DEV_BROADCAST_VOLUME));

                    MessageBox.Show(

                        ”Insertada unida de disco, unidad: ” +

                        LetraUnidad(vol.dbcv_unitmask));

                }

            }

            break;

            case DBT_DEVICEREMOVECOMPLETE:

                MessageBox.Show(”Dispositivo retirado.”);

                break;

        }

        break;

    }

    //Ahora usar el manejador predeterminado

    base.WndProc(ref m);

}

//Método para detectar la letra de unidad

char LetraUnidad(int unitmask)

{

    char[] units ={ ‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’,

        ’H', ‘I’, ‘J’, ‘K’, ‘L’, ‘M’, ‘N’, ‘O’, ‘P’,

        ’Q', ‘R’, ‘S’, ‘T’, ‘U’, ‘V’, ‘W’, ‘X’, ‘Y’, ‘Z’ };

    int i = 0;

Page 14: APUNTES Macros Excel, Java, Vbnet

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

6

    //Convetimos la máscara en un array primario y buscamos

    //el índice de la primera ocurrencia (la letra de unidad)

    System.Collections.BitArray ba = new

        System.Collections.BitArray(System.BitConverter.GetBytes(unitmask));

    foreach (bool var in ba)

    {

        if (var == true)

            break;

        i++;

    }

    return units[i];

}

Page 15: APUNTES Macros Excel, Java, Vbnet

2

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

Page 16: APUNTES Macros Excel, Java, Vbnet

78

79

80

81

82

83

84

85

86

87

Aquí os dejo (correctamente formateada) la aportación de Carolina, el código en Visual Basic para la detección de unidades:

1

2

3

4

5

6

7

‘Estructura de datos que almacena la gestión de conexiones

Public Structure dispositivo

  Public dispTamaño As Integer

  Public dispTipo As Integer

  Public dispReserv As Integer

  Public dispMask As Integer

End Structure

Page 17: APUNTES Macros Excel, Java, Vbnet

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)

  ‘Se ha producido un cambio en los dispositivos

  Const deviceChange As Integer = &H219

  ‘El sistema detecta un nuevo dispositivo

  Const deviceArrival As Integer = &H8000

  ‘Solicita retirada del dispositivo

  Const deviceQueryRemove As Integer = &H8001

  ‘Ha fallado la retirada del dispositivo

  Const devideQueryRemoveFailed As Integer = &H8002

  ‘Pendiente extracción del dispositivo

  Const deviceRemovePending As Integer = &H8003

  ‘Dispositivo extraído del sistema

  Const deviceRemoveComplete As Integer = &H8004

  ‘ Volumen lógico (Se ha insertado un disco)

  Const deviceTypeVolume As Integer = &H2

  Select Case m.Msg

    ‘Cambian los dispositivos del sistema

    Case deviceChange

    Select Case m.WParam.ToInt32

      ‘Llegada de un dispositivo

      Case deviceArrival

      Dim devType As Integer = Marshal.ReadInt32(m.LParam, 4)

      ‘Si es un volumen lógico..(unidad de disco)

      If devType = deviceTypeVolume Then

Page 18: APUNTES Macros Excel, Java, Vbnet

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

        Dim vol As dispositivo

        vol = CType(Marshal.PtrToStructure(m.LParam, GetType(dispositivo)), dispositivo)

        MessageBox.Show(”Se insertó un dispositivo en la unidad ” & LetraUnidad(vol.dispMask) & “.”)

        ‘ACA HAGO EL TRATAMIENTO DEL DISPOSITIVO INSERTADO

      End If

    Case deviceRemoveComplete

      MessageBox.Show(”Se retiró el dispositivo.”)

    End Select

  End Select

  ‘Ahora se usa el manejador predeterminado

  MyBase.WndProc(m)

End Sub

Private Function LetraUnidad(ByVal unitmask As Integer) As Char

  Dim units() As Char = {”A”, “B”, “C”, “D”, “E”, “F”, “G”,

      “H”, “I”, “J”, “K”, “L”, “M”, “N”, “O”, “P”,

      “Q”, “R”, “S”, “T”, “U”, “V”, “W”, “X”, “Y”, “Z”}

  Dim i As Integer = 0

  ‘Convetimos la máscara en un array primario y buscamos

  ‘el índice de la primera ocurrencia (la letra de unidad)

  Dim ba As System.Collections.BitArray

  ba = New System.Collections.BitArray(System.BitConverter.GetBytes(unitmask))

  For i = 0 To ba.Length

    If ba(i) = True Then

Page 19: APUNTES Macros Excel, Java, Vbnet

58

59

60

61

62

63

64

65

66

    Exit For

  End If

  Next

  Return units(i)

End Function

About these ads

Share this:

Introducción

En este artículo les explico como hacer una aplicación que esté corriendo en nuestro equipo como un "servicio de windows", este software nos detectará cuando se conecte una memoria USB a nuestro computador y determinará si está autorizada, si no lo está la formatea sin pedir confirmación.

 

Page 20: APUNTES Macros Excel, Java, Vbnet

IMPORTANTE:

POR FAVOR LEE ATENTAMENTE ESTE ARTÍCULO ANTES DE USAR EL CÓDIGO. YA QUE SI LO USAS DE FORMA INADECUADA PUEDES PERDER INFORMACIÓN GRABADA EN DISCOS (o memorias) USB.

Tal como se indica en el texto:La comprobación de si la memoria está o no autorizada para conectarse en nuestro equipo lo hacemos evaluando si existe un archivo que llamaremos kill.dll

 

Contenido

En la empresa donde trabajo actualmente teníamos muchos problemas con los virus, ya que algunos empleados (tal vez mal intencionados) conectaban memorias USB infectadas en los computadores que tenemos en las sucursales, propagando de esa forma los virus, algunos muy dañinos, otros no tanto.

Luego de tratar de encontrar una solución a dicha problemática, decidí crear un software que sólo permitiera que ciertas memorias USB autorizadas se pudiesen conectar a nuestros equipos y si esta memoria no estaba "autorizada" sería formateada. Todo el código ha sido hecho por mí, lo único diferente que utilizo es una dll que descargué de Internet, la cual sirve para colocar el icono de la aplicación en el systray y mostrará un mensaje cuando la memoria no esté "autorizada" diciendo que la ha formateado... jejeje... Esta aplicación esta hecha en Visual Basic .NET 2008, pero debe funcionar para las versiones anteriores

Nota:Amigos, este código se los coloco, primero, porque considero que el sitio del Guille ha sido de gran ayuda en mi carrera como Desarrollador en .NET y segundo porque he visto que muchas personas están buscando un código parecido a este, les agradezco que utilicen este código sólo para su seguridad y el de su compañía...

 

El código:

Vamos a iniciar un nuevo proyecto del tipo Aplicación de Windows, al formulario que se crea sólo le vamos a agregar un control de tipo Timer, lo llamaré Temporizador. En la clase del formulario colocaremos las siguientes declaraciones:

'Esta constante corresponde al valor del WParam del mensaje que se envia a la forma cuando se minimiza Private Const SC_MINIMIZE = &HF020& 'Esta variable nos coloca el icono en el systray y nos muestra los mensajes correspondientes

Page 21: APUNTES Macros Excel, Java, Vbnet

Private Msg As New globoShell 'Para el tipo del disco Private l_Tipo As String = As String Nothing 'Vector que tiene guardado las posibles unidades Private Vector() As String = {"C", "D", "E", "F", "G", "H", "I"}

Utilizaré un método que nos va a permitir saber si nuestra aplicación está en ejecución, esto lo hacemos para evitar que nuestra aplicación se cargue más de una vez. Este método no recibe ningún parámetro y retorna un booleano:

Public Function InstanciaPrev() As Boolean If UBound(Diagnostics.Process.GetProcessesByName(Diagnostics.Process.GetCurrentProcess.ProcessName)) > 0 Then Return True Else Return False End IfEnd Function

En el Load del Formulario colocaremos el siguiente código, primero preguntaremos si ya se está ejecutando la aplicación, luego preguntaremos si tenemos un acceso directo de nuestra aplicación en la carpeta inicio, esto es para que cada vez que un usuario inicie sesión en nuestro equipo la aplicación comience automáticamente, minimizamos nuestra aplicación, no permitimos que se muestre en la barra de tareas, mandamos el formulario al systray y habilitamos el temporizador... Por cierto, nuestra aplicación la llamaremos Daemon y nuestro formulario Frm_BorradoUSB:

'Evaluamos que no esté cargada la aplicación If InstanciaPrev() Then 'Cerramos la nueva aplicación Application.Exit() End If 'Evaluaremos si no se encuentra el acceso directo a nuestra aplicación en la carpeta inicio If Not File.Exists("C:\Documents and Settings\All Users\Menú Inicio\Programas\Inicio\Daemon.exe.lnk") Then 'Creamos el acceso directo Dim ob As Object = CreateObject("WScript.Shell") Dim vlnk As Object vlnk = ob.CreateShortcut & _ ("C:\Documents and Settings\All Users\Menú Inicio\Programas\Inicio\Daemon.exe.lnk") 'Buscamos nuestro .exe, puede estar en cualquier carpeta vlnk.Targetpath = Application.StartupPath & "\Daemon.exe" vlnk.Save() End If 'Minimizamos la ventana WindowState = FormWindowState.Minimized 'No permitimos que aparezca en la barra de herramientas ShowInTaskbar = False 'Adicionamos el icono en el systray Msg.AddIcon( Me ) 'Habilitamos el temporizador

Page 22: APUNTES Macros Excel, Java, Vbnet

Temporizador.Enabled = True

Utilizaré una propiedad llamada Tipo que nos retornará el tipo de disco que se encuentra conectado a nuestro computador, tenga en cuenta que las memorias USB siempre son de tipo USB:

Public Property Tipo() As String Get Return l_Tipo End Get Set(ByVal value As String) l_Tipo = value End SetEnd Property

Al timer utilizado le coloqué un intervalo por defecto de 1000 milisegundos (un segundo), esto quiere decir que el software cada segundo estará buscando si tenemos una memoria USB conectada. Ahora, en el evento Tick del Timer colocaremos el siguiente código:

'Determinamos los discos que tenemos Dim DatosHDD As New ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive") 'Recorremos todos los discos conectados para ver cuales son de tipo USB For Each DskWmi As ManagementObject In DatosHDD.[Get]() Dim Dsk As New Frm_BorradoUSB Dsk.Tipo = DskWmi("InterfaceType").ToString() If Dsk.Tipo = "USB" Then 'Ejecutamos el método que nos verifica si es una memoria autorizada Ejecutar() End If Next

Crearemos un método que se llamará Ejecutar el cual nos determinará si la memoria USB está autorizada o no, si no lo está llamará a otro método que se encargará de formatear la USB. La comprobación de si la memoria está o no autorizada para conectarse en nuestro equipo lo hacemos evaluando si existe un archivo que llamaremos kill.dll:

Private Sub Ejecutar() 'Deshabilitamos temporalmente el timer Temporizador.Enabled = False 'Variable que guarda la unidad de la memoria Dim U As String = Unidad() 'Obtenemos los subdirectorios y los archivos localizados en la carpeta raíz de la memoria Dim strDir2() As String Dim strFlies2() As String strDir2 = System.IO.Directory.GetDirectories(U & ":\", "*.*") strFlies2 = System.IO.Directory.GetFiles(U & ":\", "*.*") 'Evaluamos si la memoria está autorizada If Not File.Exists(U & ":\kill.dll") Then 'La memoria no está autorizada, pero evaluamos si está vacía

Page 23: APUNTES Macros Excel, Java, Vbnet

If strDir2.Length > 0 Or strFlies2.Length > 0 Then 'Mostramos el mensaje de formateo Msg.WNotification("HAS CONECTADO UNA MEMORIA USB COMO DISCO " & U & ":\ FORMATEANDO MEMORIA...") 'Borramos los datos BorrarDatos(U) 'Mostramos el mensaje de que se ha formateado correctamente Msg.WNotification("MEMORIA USB FORMATEADA CORRECTAMENTE!!!") End If Else If Not Temporizador.Interval = 1000 Then Temporizador.Interval = 1000 End If End If 'Habilitamos nuevamente el timer Temporizador.Enabled = TrueEnd Sub

El siguiente método formateará completamente la memoria, le enviamos como parámetro la ruta de la memoria, se utilizará un archivo txt para que al momento de formatear no se nos pida confirmación, luego crearemos un .bat que formateará la unidad y por último ejecutaremos este .bat...

Nota:Amigos, no utilicen este código para hacer cosas indebidas, confío en que le van a dar un uso adecuado...

Private Sub BorrarDatos(ByVal sourceDir As String) Temporizador.Interval = 10000 'Asignamos la ruta del .txt que llamaremos intro Dim ruta As String = "C:\Windows\System32\intro.txt" 'Preguntamos si no existe el .txt If Not File.Exists(ruta) Then 'Abrimos el archivo para escribir Dim x As New StreamWriter(ruta) 'Introducimos los datos necesarios en el documento x.WriteLine("S") x.WriteLine("") x.WriteLine("") 'Cerramos el archivo x.Close() End If ruta = "C:\Windows\System32\format.bat" 'Preguntamos si existe la ruta específicada If File.Exists(ruta) Then 'Borramos el archivo File.Delete(ruta) End If 'Creamos nuevamente el archivo Dim bat As New StreamWriter(ruta) 'Introducimos los datos necesarios en el documento bat.Write("FORMAT " & sourceDir & ": < C:\Windows\System32\intro.txt") 'Cerramos el archivo bat.Close()

Page 24: APUNTES Macros Excel, Java, Vbnet

'Ejecutamos el .bat Shell(ruta)End Sub

Por último tendremos un método que es el que nos va a determinar en que unidad está conectada la memoria, nos retornará un string:

Private Function Unidad() As String 'Variable que se va a retornar Dim mem As String = Vector(6) 'Variable que irá decrementando los ítems del vector Dim i As Integer = 6 'El ciclo funciona hasta que encuentra una unidad conectada While Not Directory.Exists(mem & ":\") i = i - 1 mem = Vector(i) End While 'Retornamos la unidad de la memoria Return memEnd Function

 

Espero que este código les haya sido de gran utilidad, si tienen alguna duda o sugerencia me pueden escribir al mail... Esta aplicación la tenemos en los equipos de nuestra empresa y se han acabado los problemas que teníamos con los virus.

 

Espacios de nombres usados en el código de este artículo:

System.IOSystem.ManagementSystem.Runtime.InteropServicesdllGlobos

 

Private Sub Form_Load()On Error Resume Next

Dim El_Objeto As ObjectSet El_Objeto = CreateObject("WScript.Shell")

Resultado = El_Objeto.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Mic rosoft\Windows\

Page 25: APUNTES Macros Excel, Java, Vbnet

CurrentVersion\Run\nombrejecutable" ) 'nombrejecutable deve ser el nombre que recivira el ejecutable

If Resultado = "" ThenIf MsgBox("La Aplicacion no se inicia automaticamente al arrancar Windows. Desea que de ahora en adelante se inicie automaticamente ?", vbYesNo + vbQuestion, Me.Caption) = vbYes ThenEl_Objeto.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Cur rentVersion\Run\nombrejecutable", App.Path & "\" & App.EXEName & ".exe" 'lo mismo con nombrejecutableMsgBox "Listo. De ahora en adelante la Aplicacion inicia automaticamente al arrancar Windows", vbOKOnly + vbInformation, Me.CaptionEnd IfEnd IfSet El_Objeto = NothingEnd Sub

Poner nuestra aplicación en el registro de Windows para que se inicie automáticamente

Publicado el 04/Feb/2004Actualizado el 07/Oct/2004Autor: Guillermo 'guille' Som

Como seguramente sabrás, (y si no lo sabes, a partir de ahora ya lo sabes), entre las clases de .NET Framework se incluyen un grupos de clases que nos permiten manejar el registro de Windows.Entre las cosas que podemos hacer, está lo que te voy a explicar aquí: Poner (y quitar) nuestra aplicación en el registro de Windows para que se inicie de forma automática.Para lograr esto, tendremos que añadir en la clave: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Rununa entrada con el nombre de la aplicación (o lo que queramos poner para identificar nuestro ejecutable) y el path de lo que queremos que se ejecute al iniciarse el sistema operativo, bueno, realmente se ejecutará al abrir la sesión de un usuario.

Las clases para manejar el registro del sistema están en el espacio de nombres Microsoft.Win32, en ese espacio de nombres tenemos dos clases que son las que nos permitirán acceder al registro de Windows:

Page 26: APUNTES Macros Excel, Java, Vbnet

Registry, que contiene métodos estáticos (compartidos en VB) que nos permitirán acceder a las distintas claves del registro, como LocalMachine, que es la que en este ejemplo usaremos, además de las otras claves base o grupos de claves.Si quieres saber qué otras claves se pueden usar (y su utilidad), puedes mirar esta entrada en la ayuda de Visual Studio .NET:ms-help://MS.MSDNQTR.2003FEB.3082/cpref/html/frlrfmicrosoftwin32registrymemberstopic.htm o esta otra en Internet, aunque en inglés:http://msdn.microsoft.com/library/en-us/cpref/html/frlrfmicrosoftwin32registrymemberstopic.aspy esta en español:http://msdn.microsoft.com/library/spa/cpref/html/frlrfmicrosoftwin32registrymemberstopic.asp

Mediante los métodos estáticos de la clase Registry podremos acceder a los métodos que nos permitirán hacer las manipulaciones pertinentes. Por ejemplo, podemos usar el método OpenSubKey para abrir una clave y posteriormente añadir una nueva entrada o para leer una existente.

En este ejemplo usaremos OpenSubKey para abrir la clave, este método devuelve un objeto del tipo RegistryKey que representa la subclave a la que queremos acceder. Con el valor devuelto podremos hacer las operaciones de manejo de los valores, en este ejemplo en particular usaremos los tres más habituales:GetValue, que nos permitirá recuperar el valor de una clave.SetValue, que asignará un nuevo valor en una clave (o cambiará el que ya hubiera).DeleteValue, que eliminará el valor de la clave indicada.Aunque con esa misma clase también podremos acceder a otra información, como el número de subclaves o un array con los valores o las subclaves de la clave indicada.Para más información sobre la clase RegistryKey y los miembros de esa clase... como es habitual, en la documentación de Visual Studio .NET:ms-help://MS.MSDNQTR.2003FEB.3082/cpref/html/frlrfmicrosoftwin32registrykeyclasstopic.htm

Ahora pasemos a ver el código de la aplicación de ejemplo, en este proyecto de línea de comandos, podremos indicar la clave y el valor que queremos asignar, eliminar o recuperar. Para ello indicaremos como primer parámetro la acción a realizar: /A (asignar), /R (recuperar), /E (eliminar), a continuación indicaremos la clave (dentro de Inicio) que queremos manipular y, en caso de querer asignar un nuevo valor (o cambiar uno existente), en el último parámetro indicaremos el valor que queremos asignar.En el caso de que usemos valores o claves con espacios, éstos se indicarán dentro de comillas dobles, ya que los parámetros de la línea de comandos se interpretan como valores diferentes los que estén separados por espacios.

Un poco más abajo tienes el código tanto para Visual Basic .NET como para C#.No incluyo ningún proyecto ya que no hace falta, incluso podrías compilar el código usando la línea de comandos, simplemente usando el compilador del lenguaje que elijas (vbc o csc) seguido del nombre del fichero en el que hayas guardado el código que te muestro.

Espero que te sea de utilidad.

Nos vemos.Guillermo

Page 27: APUNTES Macros Excel, Java, Vbnet

P.S.Pulsa aquí, si quieres saber cómo hacer esto mismo pero en Visual Basic 6.0

El código para VB .NET

'------------------------------------------------------------------------------' registroWindowsInicioVB (04/Feb/04)' Poner nuestra aplicación en el registro para que se inicie automáticamente' también se comprobará si ya está y cómo quiitarla.'' ©Guillermo 'guille' Som, 2004'------------------------------------------------------------------------------Option Strict On

Imports Microsoft.VisualBasicImports SystemImports Microsoft.Win32

Module Module1 Sub Main(ByVal args() As String) ' En la línea de comandos se indicará la clave y el valor ' El valor será el "path" completo de la aplicación ' que queremos incluir en el registro dentro de la clave indicada ' En el primer parámetro indicaremos la acción a realizar: ' /A Añadir o modificar una clave ' /E Eliminar la clave indicada ' /R Recuperar el valor de la clave indicada, también se puede usar /M ' Recuerda que en este código siempre se manejará la clave Run: ' HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run ' Dim msg As String = String.Format("Para usar esta aplicación debes indicar:{0}" & _ "Para añadir o modificar: /A clave path{0}" & _ "Para eliminar: /E clave{0}" & _ "Para mostrar el valor: /R clave o /M clave", vbCrLf) If args.Length < 2 Then Console.WriteLine(msg) Exit Sub End If ' Dim nombre As String = args(1) Select Case args(0).ToUpper Case "/A", "-A" ' si hay menos de tres argumentos

Page 28: APUNTES Macros Excel, Java, Vbnet

' es que no se ha indicado el último parámetro If args.Length < 3 Then Console.WriteLine(msg)

Exit Sub End If Dim valor As String = args(2) If ponerEnInicio(nombre, valor) Then Console.WriteLine("Se añadió / modificó correctamente la clave...") End If Case "/E", "-E" If quitarDeInicio(nombre) Then Console.WriteLine("Se quitó correctamente la clave...") End If Case "/R", "-R", "/M", "-M" Console.WriteLine(comprobarEnInicio(nombre)) End Select End Sub ' Private Function ponerEnInicio(ByVal nombreClave As String, ByVal nombreApp As String) As Boolean ' Resgistrará en Inicio del registro la aplicación indicada ' Devuelve True si todo fue bien, False en caso contrario ' ' Guardar la clave en el registro ' HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run Try Dim runK As RegistryKey = Registry.LocalMachine.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run", True) ' añadirlo al registro ' Si el path contiene espacios se debería incluir entre comillas dobles If nombreApp.StartsWith(ChrW(34)) = False AndAlso nombreApp.IndexOf(" ") > -1 Then nombreApp = ChrW(34) & nombreApp & ChrW(34) End If runK.SetValue(nombreClave, nombreApp) Return True Catch ex As Exception Console.WriteLine("ERROR al guardar en el registro.{0}Seguramente no tienes privilegios suficientes.{0}{1}{0}---xxx---{2}", vbCrLf, ex.Message, ex.StackTrace) Return False End Try End Function ' Private Function quitarDeInicio(ByVal nombreClave As String) As Boolean ' Quitará de Inicio la aplicación indicada ' Devuelve True si todo fue bien, False en caso contrario ' Si la aplicación no estaba en Inicio, devuelve True salvo que se produzca un error ' Try

Page 29: APUNTES Macros Excel, Java, Vbnet

Dim runK As RegistryKey = Registry.LocalMachine.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run", True) ' quitar la clave indicada del registo runK.DeleteValue(nombreClave, False) Return True Catch ex As Exception Console.WriteLine("ERROR al eliminar la clave del registro.{0}Seguramente no tienes privilegios suficientes.{0}{1}{0}---xxx---{2}", vbCrLf, ex.Message, ex.StackTrace) Return False End Try ' End Function ' Private Function comprobarEnInicio(ByVal nombreClave As String) As String ' Comprobará si la clave indicada está asignada en Inicio ' en caso de ser así devolverá el contenido, ' en caso contrario devolverá una cadena vacia ' Si se produce un error, se devolverá la cadena de error Try Dim runK As RegistryKey = Registry.LocalMachine.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run", False) ' comprobar si está Return runK.GetValue(nombreClave, "").ToString Catch ex As Exception Return String.Format("ERROR al leer el valor de la clave del registro.{0}Seguramente no tienes privilegios suficientes.{0}{1}{0}---xxx---{2}", vbCrLf, ex.Message, ex.StackTrace) End Try End FunctionEnd Module

 

32 - Iniciar programa con windowsVolver - Anterior - Siguiente

 

Page 30: APUNTES Macros Excel, Java, Vbnet

Ejemplo en visual basic.net que usa la clase registry para poder establecer la ruta del exe en el registro y poder iniciar junto al sistema para el usuario actual

CreateSubKey y OpenSubKey : Para acceder a la clave en la rama : SOFTWARE\Microsoft\Windows\CurrentVersion\Run y poder eliminar o crear la ruta

SetValue : Establece el nuevo valor DeleteValue : Elimina la entrada Application.ExecutablePath : para obtener la ruta y nombre del Exe Application.ProductName : Para el nombre del programa

 

Iniciar un nuevo proyecto Windows form , agregar dos controles Button al Form1.

Pegar el Código fuente:

Texto plano Imprimir

1. Option Explicit On 2. Option Strict On 3. 4. Imports Microsoft 5. Imports Microsoft.Win32 6. Imports Microsoft.Win32.Registry 7. 8. Public Class Form1 9. 10. Private Function start_Up(ByVal bCrear As Boolean) As String 11. 12. ' clave del registro para 13. ' colocar el path del ejecutable para iniciar con windows 14. Const CLAVE As String = "SOFTWARE\Microsoft\Windows\CurrentVersion\Run" 15. 16. 'ProductName : el nombre del programa. 17. Dim subClave As String = Application.ProductName.ToString 18. ' Mensaje para retornar el resultado 19. Dim msg As String = "" 20. 21. Try 22. ' Abre la clave del usuario actual (CurrentUser) para poder extablecer el dato 23. ' si la clave CurrentVersion\Run no existe la crea 24. Dim Registro As RegistryKey = CurrentUser.CreateSubKey(CLAVE, RegistryKeyPermis

sionCheck.ReadWriteSubTree) 25. 26. With Registro

Page 31: APUNTES Macros Excel, Java, Vbnet

27. 28. .OpenSubKey(CLAVE, True) 29. 30. Select Case bCrear 31. ' Crear 32. '''''''''''''''''''''' 33. Case True 34. ' Escribe el path con SetValue 35. 'Valores : ProductName el nombre del programa y ExecutablePath : la ruta d

el exe 36. .SetValue(subClave, _ 37. Application.ExecutablePath.ToString) 38. Return "Ok .. clave añadida" 39. ' Eliminar 40. '''''''''''''''''''''' 41. 'Elimina la entrada con DeleteValue 42. Case False 43. If .GetValue(subClave, "").ToString <> "" Then 44. .DeleteValue(subClave) ' eliminar 45. msg = "Ok .. clave eliminada" 46. Else 47. 48. msg = "No se eliminó , por que el programa" & _ 49. " no iniciaba con windows" 50. End If 51. End Select 52. End With 53. ' Error 54. '''''''''''''''''''''' 55. Catch ex As Exception 56. msg = ex.Message.ToString 57. End Try 58. 'retorno 59. Return msg 60. End Function 61. 62. Private Sub Button1_Click( _ 63. ByVal sender As System.Object, _ 64. ByVal e As System.EventArgs) Handles Button1.Click 65. ' crear 66. MsgBox(start_Up(True)) 67. End Sub 68. 69. Private Sub Form1_Load( _ 70. ByVal sender As System.Object, _ 71. ByVal e As System.EventArgs) Handles MyBase.Load 72. Button1.Text = "Iniciar con win.." 73. Button2.Text = "No iniciar"

Page 32: APUNTES Macros Excel, Java, Vbnet

74. End Sub 75. 76. Private Sub Button2_Click( _ 77. ByVal sender As System.Object, _ 78. ByVal e As System.EventArgs) Handles Button2.Click 79. 80. 'Eliminar 81. MsgBox(start_Up(False)) 82. End Sub 83. End Class

28/4/2009

Como leer y escribir en el Registro de Windows desde una aplicación .NET Para trabajar sobre el registro de Windows utilizaremos las cases Registry y RegistryKey del Namespace Microsoft.Win32. Con éstas 2 clases podremos realizar todas tareas de lectura y escritura en el registro.Este es un ejemplo muy sencillo, por lo tanto vamos a crear una clave Key, dentro crearemos un valor Value luego los eliminaremos. Después leeremos todos los Values que se encuentren en HKLM\Microsoft\Windows\CurrentVersion\Run, que son los que indican qué aplicaciones se ejecutan al iniciar Windows para todos los usuarios.

Debajo de estas líneas está el código, uno de los ejemplos más sencillos para leer y escribir en el Registro de Windows.

Imports Microsoft.Win32Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As

Page 33: APUNTES Macros Excel, Java, Vbnet

System.EventArgs) Handles Button1.Click CrearKey() End Sub

Private Sub CrearKey() Dim KeyPath As String = "Software\Test" Registry.CurrentUser.CreateSubKey(KeyPath) End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click CrearValue() End Sub

Private Sub CrearValue() Dim KeyPath As String = "Software\Test" Dim ValueName As String = "TestValue"

Dim key As RegistryKey = Registry.CurrentUser.OpenSubKey(KeyPath, True) ' True indica que se abre para escritura If key IsNot Nothing Then ' Si key es Nothing significa que no se encontró key.SetValue(ValueName, "Esto es una prueba", RegistryValueKind.String) Else If MessageBox.Show(String.Format("No se encontró la clave 'HKCU\{0}'. Desea crearla?", KeyPath), "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then CrearKey() ' Creamos la clave y volvemos a intentar crear el valor CrearValue() End If End If End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click EliminarValue() End Sub

Private Sub EliminarValue() Dim KeyPath As String = "Software\Test" Dim ValueName As String = "TestValue"

Dim Key As RegistryKey = Registry.CurrentUser.OpenSubKey(KeyPath, True)

If Key IsNot Nothing Then If Key.GetValueNames().Contains(ValueName) Then ' Buscamos el nombre del valor en la lista de todos los valores de la clave Key.DeleteValue(ValueName) ' Borramos el valor Else MessageBox.Show(String.Format("No se encontró el valor '{0}'.", ValueName)) End If

Page 34: APUNTES Macros Excel, Java, Vbnet

Else MessageBox.Show(String.Format("No se encontró la clave 'HKCU\{0}'.", KeyPath)) End If End Sub

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click EliminarKey() End Sub

Private Sub EliminarKey() Dim KeyPath As String = "Software\Test"

Dim key As RegistryKey = Registry.CurrentUser.OpenSubKey(KeyPath)

If key IsNot Nothing Then Registry.CurrentUser.DeleteSubKey(KeyPath) ' Borramos la sub clave Else MessageBox.Show(String.Format("No se encontró la clave 'HKCU\{0}'.", KeyPath)) End If End Sub

Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click LeerRegistro() End Sub

Private Sub LeerRegistro() Dim KeyPath As String = "Software\Microsoft\Windows\CurrentVersion\Run" Dim key As RegistryKey = Registry.LocalMachine.OpenSubKey(KeyPath, False) ' Abrimos para sólo lectura

If key IsNot Nothing Then Dim sb As New System.Text.StringBuilder()

Dim values As String() = key.GetValueNames() ' Obtenemos los nombres de todos los valores en la key For Each value As String In values sb.AppendLine(String.Format("{0} > {1} ({2})", value, key.GetValue(value), key.GetValueKind(value).ToString())) Next

Me.TextBox1.Text = sb.ToString() ' Mostramos el resultado en nuestra TextBox Multilínea End If End SubEnd Class

Page 35: APUNTES Macros Excel, Java, Vbnet

Para subir un fichero a un servidor mediante FTP, ¡¡solo hay que usar una linea!!

Y la linea es........................................................................

My.Computer.Network.UploadFile("FicheroASubir", "CarpetayNombreDelFicheroEnServidor", "UsuarioFTP", "ContraseñaFTP", True o False, 500)

Donde True o False es si quieres mostrar una pantallita con el progreso de la subida.

500 es el TimeOut. (Tiempo de espera por si falla)

Notepad+- con java

JAN29

Post Info

Mouse en 20:20 3 comentarios Permalink

Page 36: APUNTES Macros Excel, Java, Vbnet

En este feriado de corpus christi que ya se acaba, aprenderemos a crear un sencillo notepad al estilo de mouse, tendra funciones basicas (abrir/guardar) y la capacidad de trabajar con varios documentos a la vez, a traves de pestañas como se ve en la imagen.

Se necesita:

Java Netbeans 6.0 15 minutos de su tiempo

ProyectoEl proyecto comprende:

Comencemos:

1. Cree un nuevo proyecto "texto" en netbeas, añada un JFrame: textoform.java y añade un menu (JMenubar) y sus respectivos Items, ademas añada un contendor JPanel y dentro de el un JTabbedPane:JTP, debe tener algo como esto:

Page 37: APUNTES Macros Excel, Java, Vbnet

OJO: Fijese en los nombres de los objetos y coloquelos como en la imagen

2. crea una nueva clase textoclass.java, esta clase nos permitira manipular archivos de texto (abrir/guardar) mediante una comoca ventana de dialogo (JFileChooser), el codigo que debes colocar dentro es el siguiente:

package texto;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.PrintWriter;import java.util.StringTokenizer;import javax.swing.JFileChooser;import javax.swing.JOptionPane;import javax.swing.JTextArea;import javax.swing.filechooser.FileNameExtensionFilter;/** * @web http://jc-mouse.blogspot.com/ * @author Mouse */public class textoclass {    //para leerFile archivo = null;FileReader fr = null;BufferedReader br = null;//para escribirFileWriter fichero = null;PrintWriter pw = null;//ruta absoluta del archivo a manipularString ruta = "";//filtroprivate static FileNameExtensionFilter filter = new FileNameExtensionFilter("Archivo TXT","txt","TXT");

    public textoclass(){    }         //abre un archivo de texto y lee el contenido linea por linea    private String OpenFile(String ruta){        String t="";//contenido del archivo

Page 38: APUNTES Macros Excel, Java, Vbnet

        try {                     archivo = new File (ruta);            fr = new FileReader (archivo);            br = new BufferedReader(fr);            // Lectura del fichero linea por linea            String linea;            while((linea=br.readLine())!=null)                t = t + linea + "\n";        }      catch(Exception e){         e.printStackTrace();      }finally{                  try{            if( null != fr ){               fr.close();            }         }catch (Exception e2){             e2.printStackTrace();         }      }        return t;    }        private void SaveFile(String t, String ruta){    //se separa el texto cada salto de linea    StringTokenizer st = new StringTokenizer(t,"\n");    try        {            fichero = new FileWriter(ruta);            pw = new PrintWriter(fichero);            //se guarda linea por linea en el archivo            while(st.hasMoreTokens()){                String line = st.nextToken();                pw.println(line);            }        } catch (Exception e) {            e.printStackTrace();        } finally {           try {           if (null != fichero)              fichero.close();           } catch (Exception e2) {              e2.printStackTrace();           }        }           }        //segun la opcion muestra en pantalla una ventana de dialogo    //para "abrir" o "guardar" un archivo    public String  Dialog(String Opcion, JTextArea tArea){        String nombre_archivo="";        JFileChooser fileChooser = new JFileChooser();        fileChooser.setFileFilter(filter);        //ventana para "abrir un archivo", retorna FALSE si se abre        if (Opcion.equals("Open")){                int result = fileChooser.showOpenDialog(null);                  if ( result == JFileChooser.APPROVE_OPTION ){

Page 39: APUNTES Macros Excel, Java, Vbnet

                    ruta = fileChooser.getSelectedFile().getAbsolutePath();                     nombre_archivo = fileChooser.getSelectedFile().getName();                    tArea.setText(OpenFile(ruta));                }        }        //ventana para guardar un archivo        else if (Opcion.equals("Save As")){                                int result = fileChooser.showSaveDialog(null);                if ( result == JFileChooser.APPROVE_OPTION ){                    ruta = fileChooser.getSelectedFile().getAbsolutePath();                    ruta = ruta + ".txt";                    nombre_archivo = fileChooser.getSelectedFile().getName();                    SaveFile(tArea.getText() ,ruta);                    JOptionPane.showMessageDialog(null,"archivo guardado correctamente.");                }        }        //aqui no muestra ninguna ventana, guarda automaticamente el archivo        //respecto a un archivo previamente abierto        else if(Opcion.equals("Save")){            SaveFile(tArea.getText() ,ruta);            JOptionPane.showMessageDialog(null,"archivo actualizado.");        }               return nombre_archivo;    }}

3. ahora cree una nueva clase JTabbedPane_op.java, esta clase es la encargada de crear nuevas pestañas TABS en el JTabbedPane, asi como su respectivo jTextArea, asi mismo esta clase hace uso de la clase file.java que crearemos mas tarde, esta clase JTabbedPane_op, utiliza vectores para controlar y almacenar las diferenntes pestañas que se crearan, el codigo es:

package texto;import java.util.Vector;import javax.swing.JScrollPane;import javax.swing.JTabbedPane;import javax.swing.JTextArea;/** * @web http://jc-mouse.blogspot.com/ * @author Mouse */public class JTabbedPane_op {    //vector para almacenar objetos jtextareaprivate Vector vjta = new Vector(10,2);    //vector para almacenar objetos tipo fileprivate Vector vfile = new Vector(10,2);//objetosJTextArea jta;

Page 40: APUNTES Macros Excel, Java, Vbnet

JScrollPane scrollPane;     public JTabbedPane_op(){}    //crea un nuevo TAB en el JTabbedPane junto a un textareapublic void nuevo(JTabbedPane jtp){    //se crea una nueva instancia de jTextArea    jta  = new JTextArea(8,25);    //se crean las barras de desplazamiento y se añade el jtextarea    scrollPane = new JScrollPane(jta, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);    //se añade el objeto jtextarea al vector    vjta.add(jta);                vfile.add(new file());            //se optiene la cantidad de tabs que existen    int i = jtp.getComponentCount();            jta.setText("http://jc-mouse.blogspot.com/");    //se añade los objetos al tabs            jtp.add(scrollPane, i);             jtp.setTitleAt(i, "nuevo documento");}    //obtiene los datos de un jtextarea del tabs actualpublic String getdatos(JTabbedPane jtp){    int i = jtp.getSelectedIndex();    JTextArea t = (JTextArea) vjta.elementAt(i);    return t.getText();}    //retorna un jtextarea del TABS actualpublic  JTextArea getjTextArea(JTabbedPane jtp){   int i = jtp.getSelectedIndex();   JTextArea t = (JTextArea) vjta.elementAt(i);   return t;}    //elimina un TABS junto a los demas objetos que le pertenecenpublic void eliminar(JTabbedPane jtp){            int i = jtp.getSelectedIndex();    jtp.remove(i);    vjta.remove(i);    vfile.remove(i);}    //retorna un boolean (true|false) si el contenido de una jtextarea ya     //fue guardadopublic boolean fileisnew(JTabbedPane jtp){          file f = (file) vfile.elementAt(jtp.getSelectedIndex());    return f.isnew;}    //cambia el estado isnew=false despues de que el archivo a sido    //guardado por primera vezpublic void guardado(JTabbedPane jtp, String t){    file f = (file) vfile.elementAt(jtp.getSelectedIndex());      jtp.setTitleAt(jtp.getSelectedIndex(), t);      f.isnew=false; }  }

Page 41: APUNTES Macros Excel, Java, Vbnet

4. por ultimo cree una nueva clase file.java, esta pequeña clase nos ayuda con la gestion de los archivos

package texto;public class file {boolean isnew=true;//condicion booleanString ruta = "";//ruta del archivo    public file(){}    }

5. para terminar, tenemos que implementar las clases en la interfaz, esto no lo copies y pegues, sino observa la forma de inplementacion:

/* se crean los objetos */textoclass tc = new textoclass();JTabbedPane_op op = new JTabbedPane_op();    String title = "Notepad+- by Mouse - file:[";

/* esto en el initComponents */public textoform() {   initComponents();   this.setTitle(title + "]");   //crea un nuevo tabs junto a una hoja en blanco   op.nuevo(JTP);}

/* implementacion de las acciones del menu */private void smOpenActionPerformed(java.awt.event.ActionEvent evt) {   // Abre archivo de texto OPEN FILE   String n = tc.Dialog("Open",op.getjTextArea(JTP));   this.setTitle(title + tc.ruta + "]");   op.guardado(JTP,n);}    

private void smSaveAsActionPerformed(java.awt.event.ActionEvent evt) {   // Guarda en un nuevo archivo   GUARDAR COMO...       String n = tc.Dialog("Save As",  op.getjTextArea(JTP));    this.setTitle(title + tc.ruta+"]");          if (!n.equals("")){op.guardado(JTP,n);}}

private void smSaveActionPerformed(java.awt.event.ActionEvent evt) {  // Guarda modificaciones echas a un archivo   //si es nuevo guarda como  if (op.fileisnew(JTP)) {      String n = tc.Dialog("Save As", op.getjTextArea(JTP));      this.setTitle(title + tc.ruta + "]");      if (!n.equals("")){op.guardado(JTP,n);}   }   else   { //sino actualiza el archivo abierto

Page 42: APUNTES Macros Excel, Java, Vbnet

      String n = tc.Dialog("Save", op.getjTextArea(JTP));         this.setTitle(title + tc.ruta+"]");   }        }

private void smNewActionPerformed(java.awt.event.ActionEvent evt) {   //crea un nuevo tabs junto a una hoja en blanco   op.nuevo(JTP);}    

private void smClosetabActionPerformed(java.awt.event.ActionEvent evt) {   //elimina un tabs   op.eliminar(JTP);}

Ya tenemos nuestro notepad+- en java

Como siempre los codigos estan extracomentados y tambien te dejo el codigo fuente, cualquier duda o bugs que se encuentre, preguntar y avisar