apuntes macros excel, java, vbnet

45
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

Upload: remhinob

Post on 25-Nov-2015

257 views

Category:

Documents


0 download

TRANSCRIPT

Operaciones bsicas con archivo y carpetas10/11/2012 by Fernando Santos | 0 commentsA menudo se debe comprobar si una hoja de clculo, archivo o carpeta existe, o si un determinado archivo est actualmente abierto. Usted tambin podra tener que eliminar un archivo. Tambin 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 travs de una macro en el uso diario. A continuacin se muestra algunos ejemplos bsicos con archivos y carpetas.EJEMPLOS:1. VISUALIZAR LA UBICACIN DEL ARCHIVO EXCEL ACTUALSe puede hacer esta operacin con la creacin de la siguiente macro:MsgBox Ubicacion de archivo: & CurDirOtra forma de mostrar est misma operacin es a travs de controles Activex que se insertan en la hoja de clculo. Esta operacin se puede visualizar en la siguiente imagen.-En la hoja de clculo, insertamos el botn de comando

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

-Finalmente en la hoja de clculo se hace click izquierdo sobre el botn y nos muestra el siguiente mensaje.

2. CAMBIAR LA UBICACIN ACTUAL DE D AL DISCO C: De la misma forma que la operacin anterior se puede crear la siguiente macro:ChDrive CMsgBox Ubicacion de archivo: & CurDirTambin se puede crear el botn de comando de controles Activex y seguir el mismo proceso del ejemplo anterior.3. BORRAR UN ARCHIVOSe crea una macro con el siguiente cdigo VBA, especificando la ubicacin 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.xlsx4. CREAR UNA CARPETA-Para crear una carpeta en la ubicacin actual en la que se encuentra el archivo Excel se sigue el siguiente cdigo en VBA en macros.MkDir Ricard-Para crear una nueva carpeta en una ubicacin especfica, se crea el siguiente macro.MkDir D:PUCPCURSO MACROSNueva Carpetay luego se ejecuta.5. COPIAR UN ARCHIVO A OTRA CARPETAPara copiar un archivo Excel a otra carpeta que se encuentra en un disco distinto a su ubicacin actual se ejecuta una macro con el siguiente cdigo VBA.FileCopy D:PUCPCURSO MACROSClase_2b.xlsm, E:TSWElaborado por: Ricardo Najarro ChuchnEjemplos de operaciones bsicas

Como enviar un archivo a un servidor FTP en VB.Net lunes, 21 de junio de 2010 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.FtpWebRequestDim conexion As Net.Sockets.TcpClientclsRequest = DirectCast(System.Net.WebRequest.Create("ftp://xxx.xx.xxx.xxx/archivos/NombreArchivo), System.Net.FtpWebRequest)clsRequest.Proxy = Nothing ' Esta asignacin 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.UploadFileTryDim 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 ExceptionMsgBox(ex.Message & ". El Archivo no pudo ser enviado, intente en otro momento")End TryEnd Sub

Instrucciones1. 1 Inicia Microsoft Visual Basic Express. Haz clic en "Nuevo proyecto..." en el panel izquierdo de la pantalla y, a continuacin, selecciona "Aplicacin 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 continuacin, selecciona "Propiedades". Junto a "Habilitado", selecciona "Verdadero". Haz doble clic en "Timer1" para abrir la ventana de "Form1.vb".3. 3 Escribe el siguiente cdigo por encima de "Timer1_Tick" para declarar la funcin de "GetAsyncKeystate": Public Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Int32) As UShort4. 4 Escribe el siguiente cdigo bajo "Timer1_Tick" para capturar las teclas pulsadas mientras se ejecuta la aplicacin: 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 i5. 5 Presiona "F5" para ejecutar el programa, luego presiona "B" en el teclado y vers un recuadro de mensaje que se muestra con la letra "B".

FTP upload con vb.net FtpWebRequestby Pablo Cornehl 12/02/2012Si 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. Ms all de eso vb.net permite de forma sencilla mostrar el progreso de nuestras subidas habilitando la interfaz ui del mtodo 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 mtodo 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 botn cancelar. Lamentablemente no se puede tener acceso a esos controles para modificarlos y obtener informacin de ellos por lo que estamos muy limitados.Con FtpWebRequest las cosas se puede hacer un poco ms modulares dado que tenemos total control sobre lo que enviamos y de la forma en la que lo enviamos, pero tambin las cosas se pueden complicar un poco.123Dim request As FtpWebRequest = WebRequest.Create(New Uri("ftp://ftp.server.com/readme.txt"))request.Method = WebRequestMethods.Ftp.UploadFilerequest.Credentials = New NetworkCredential("username", "password")

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 mtodo de conexin y las credenciales que albergan el nombre de usuario y la contrasea para conectarse.1234Dim 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 travs del stream de transmisin. Enviar los archivos de esta manera en vez de usando el mtodo 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 transmisin y tiempo estimado de subida.12requestStream.Close()requestStream.Dispose()

Y finalmente le decimos al garbage collector que ya no usaremos el stream de datos y liberamos la memoria utilizada.Nuestro cdigo final queda as:0102030405060708091011Dim request As FtpWebRequest = WebRequest.Create(New Uri("ftp://ftp.server.com/readme.txt"))request.Method = WebRequestMethods.Ftp.UploadFilerequest.Credentials = New NetworkCredential("username", "password")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)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 Buttons 1 Button Donde Buscaremos El Fichero TXT A Abrir 1 Button Para guardar Los Cambios Hechos En El Fichero 1 Button Para Guardar Un Nuevo Fichero 1 Label 1 Label Para Almacenar La Ruta Del Fichero 1 Textbox 1 TextBox Donde Nos Mostrara El Contenido Del Fichero Y Podremos Editar 1 OpenFileDialog 1 OpenFileDialog Nos Mostrara Un Cuadro De Dialogo Donde Buscaremos Y Seleccionaremos El Fichero 1 SaveFileDialog 1 SaveFileDialog Nos mostrara Un Cuadro De Dialogo Donde Buscaremos La Direccin Donde Deseamos Guardar El Fichero.Haremos Un Diseo Algo Parececido Asi:

Espero Que Les Guste Mi Modelo!! :DEl Cdigo Fuente:123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657Imports System.IOPublic Class Form1Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.ClickWith OpenFileDialog1.Filter = "Ficheros de texto (*.txt)|*.txt"If .ShowDialog = Windows.Forms.DialogResult.OK ThenLabel1.Text = OpenFileDialog1.FileNameTextBox1.Text = AbrirArchivo(Label1.Text)End IfEnd WithEnd SubPublic 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()DosLine = objReader.ReadLine()If Not sLine Is Nothing ThenarrText.Add(sLine + vbCrLf)End IfLoop Until sLine Is NothingobjReader.Close()For Each sLine In arrTextTexto += sLineNextReturn TextoEnd FunctionPrivate Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.ClickIf Not Len(TextBox1.Text) = 0 ThenWith SaveFileDialog1.Reset().Filter = "Ficheros de texto (*.txt)|*.txt"If .ShowDialog = Windows.Forms.DialogResult.OK ThenIf My.Computer.FileSystem.FileExists(.FileName) ThenMy.Computer.FileSystem.DeleteFile(.FileName)My.Computer.FileSystem.WriteAllText(.FileName, TextBox1.Text & vbCrLf, True)ElseMy.Computer.FileSystem.WriteAllText(.FileName, TextBox1.Text & vbCrLf, True)End IfLabel1.Text = .FileNameEnd IfEnd WithEnd IfEnd SubPrivate Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.ClickIf Not Len(Label1.Text) = 0 Then'Para Guardar Una Manera Sencilla Es Eliminar Y Crearlo' Lo EliminamosMy.Computer.FileSystem.DeleteFile(Label1.Text)' Lo CreamosMy.Computer.FileSystem.WriteAllText(Label1.Text, TextBox1.Text & vbCrLf, True)End IfEnd SubEnd Class

Video De Muestra:Ahora Pueden Comentar y Sugerir Mas Ejemplos Espero Que Les Haya Servido En Algo !

Deteccin de la insercin de unidades de disco extrables con.NETMartes, 5 junio, 2007 Antonius Para los aficionados al desarrollo de aplicaciones con .NET y C#, aqu voy a dejar un trozo de cdigo muy interesante.Bsicamente consiste en un mtodo para notificar a una aplicacin 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 mtodo 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.123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687//Incluir esto es obligatoriousing System.Runtime.InteropServices;/** Escribe aqu el cdigo de tu programa (O donde prefieras!)*///Estructura de datos que almacena la gestin 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;}//Mtodo a sobreescribir para gestionar la llegada de nuevas unidades de discoprotected override void WndProc(ref Message m){//Estas definiciones estn en dbt.h y winuser.h//Se ha producido un cambio en los dispositivosconst int WM_DEVICECHANGE = 00219;// El sistema detecta un nuevo dispositivoconst int DBT_DEVICEARRIVAL = 08000;//Solicita retirada del dispositivoconst int DBT_DEVICEQUERYREMOVE = 08001;//Ha fallado la retirada del dispositivoconst int DBT_DEVICEQUERYREMOVEFAILED = 08002;//Pendiente extraccin del dispositivoconst int DBT_DEVICEREMOVEPENDING = 08003;//Dispositivo extrado del sistemaconst int DBT_DEVICEREMOVECOMPLETE = 08004;// Volumen lgico (Se ha insertado un disco)const int DBT_DEVTYP_VOLUME = 000000002;switch (m.Msg){//Cambian los dispositivos del sistemacase WM_DEVICECHANGE:switch (m.WParam.ToInt32()){//Llegada de un dispositivocase DBT_DEVICEARRIVAL:{int devType = Marshal.ReadInt32(m.LParam, 4);//Si es un volumen lgico..(unidad de disco)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 predeterminadobase.WndProc(ref m);}//Mtodo para detectar la letra de unidadchar 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;//Convetimos la mscara en un array primario y buscamos//el ndice de la primera ocurrencia (la letra de unidad)System.Collections.BitArray ba = newSystem.Collections.BitArray(System.BitConverter.GetBytes(unitmask));foreach (bool var in ba){if (var == true)break;i++;}return units[i];}

Aqu os dejo (correctamente formateada) la aportacin de Carolina, el cdigo en Visual Basic para la deteccin de unidades:123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566Estructura de datos que almacena la gestin de conexionesPublic Structure dispositivoPublic dispTamao As IntegerPublic dispTipo As IntegerPublic dispReserv As IntegerPublic dispMask As IntegerEnd StructureProtected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)Se ha producido un cambio en los dispositivosConst deviceChange As Integer = &H219El sistema detecta un nuevo dispositivoConst deviceArrival As Integer = &H8000Solicita retirada del dispositivoConst deviceQueryRemove As Integer = &H8001Ha fallado la retirada del dispositivoConst devideQueryRemoveFailed As Integer = &H8002Pendiente extraccin del dispositivoConst deviceRemovePending As Integer = &H8003Dispositivo extrado del sistemaConst deviceRemoveComplete As Integer = &H8004 Volumen lgico (Se ha insertado un disco)Const deviceTypeVolume As Integer = &H2Select 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 lgico..(unidad de disco) If devType = deviceTypeVolume Then 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 SelectEnd SelectAhora se usa el manejador predeterminadoMyBase.WndProc(m)End SubPrivate Function LetraUnidad(ByVal unitmask As Integer) As CharDim 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 = 0Convetimos la mscara en un array primario y buscamosel ndice de la primera ocurrencia (la letra de unidad)Dim ba As System.Collections.BitArrayba = New System.Collections.BitArray(System.BitConverter.GetBytes(unitmask))For i = 0 To ba.Length If ba(i) = True Then Exit ForEnd IfNextReturn units(i)End Function

About these ads Share this:

IntroduccinEn este artculo les explico como hacer una aplicacin 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 confirmacin.IMPORTANTE:POR FAVOR LEE ATENTAMENTE ESTE ARTCULO ANTES DE USAR EL CDIGO.YA QUE SI LO USAS DE FORMA INADECUADA PUEDES PERDER INFORMACIN GRABADA EN DISCOS (o memorias) USB.Tal como se indica en el texto:La comprobacin de si la memoria est o no autorizada para conectarse en nuestro equipo lo hacemos evaluando si existe un archivo que llamaremos kill.dllContenidoEn la empresa donde trabajo actualmente tenamos 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 dainos, otros no tanto.Luego de tratar de encontrar una solucin a dicha problemtica, decid crear un software que slo permitiera que ciertas memorias USB autorizadas se pudiesen conectar a nuestros equipos y si esta memoria no estaba "autorizada" sera formateada. Todo el cdigo 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 aplicacin en el systray y mostrar un mensaje cuando la memoria no est "autorizada" diciendo que la ha formateado... jejeje... Esta aplicacin esta hecha en Visual Basic .NET 2008, pero debe funcionar para las versiones anterioresNota:Amigos, este cdigo 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 estn buscando un cdigo parecido a este, les agradezco que utilicen este cdigo slo para su seguridad y el de su compaa...El cdigo:Vamos a iniciar un nuevo proyecto del tipo Aplicacin de Windows, al formulario que se crea slo 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 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 mtodo que nos va a permitir saber si nuestra aplicacin est en ejecucin, esto lo hacemos para evitar que nuestra aplicacin se cargue ms de una vez. Este mtodo no recibe ningn parmetro 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 FunctionEn el Load del Formulario colocaremos el siguiente cdigo, primero preguntaremos si ya se est ejecutando la aplicacin, luego preguntaremos si tenemos un acceso directo de nuestra aplicacin en la carpeta inicio, esto es para que cada vez que un usuario inicie sesin en nuestro equipo la aplicacin comience automticamente, minimizamos nuestra aplicacin, no permitimos que se muestre en la barra de tareas, mandamos el formulario al systray y habilitamos el temporizador... Por cierto, nuestra aplicacin la llamaremos Daemon y nuestro formulario Frm_BorradoUSB: 'Evaluamos que no est cargada la aplicacin If InstanciaPrev() Then 'Cerramos la nueva aplicacin Application.Exit() End If 'Evaluaremos si no se encuentra el acceso directo a nuestra aplicacin 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 Temporizador.Enabled = TrueUtilizar 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 PropertyAl 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 cdigo: '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 mtodo que nos verifica si es una memoria autorizada Ejecutar() End If NextCrearemos un mtodo que se llamar Ejecutar el cual nos determinar si la memoria USB est autorizada o no, si no lo est llamar a otro mtodo que se encargar de formatear la USB. La comprobacin 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 raz 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 vaca 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 SubEl siguiente mtodo formatear completamente la memoria, le enviamos como parmetro la ruta de la memoria, se utilizar un archivo txt para que al momento de formatear no se nos pida confirmacin, luego crearemos un .bat que formatear la unidad y por ltimo ejecutaremos este .bat...Nota:Amigos, no utilicen este cdigo para hacer cosas indebidas, confo 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 especficada 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() 'Ejecutamos el .bat Shell(ruta)End SubPor ltimo tendremos un mtodo 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 FunctionEspero que este cdigo les haya sido de gran utilidad, si tienen alguna duda o sugerencia me pueden escribir al mail... Esta aplicacin la tenemos en los equipos de nuestra empresa y se han acabado los problemas que tenamos con los virus.

Espacios de nombres usados en el cdigo de este artculo: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\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 aplicacin en el registro de Windows para que se inicie automticamente

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

Como seguramente sabrs, (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 aplicacin en el registro de Windows para que se inicie de forma automtica.Para lograr esto, tendremos que aadir en la clave: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Rununa entrada con el nombre de la aplicacin (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 sesin de un usuario.

Las clases para manejar el registro del sistema estn en el espacio de nombres Microsoft.Win32, en ese espacio de nombres tenemos dos clases que son las que nos permitirn acceder al registro de Windows:Registry, que contiene mtodos estticos (compartidos en VB) que nos permitirn acceder a las distintas claves del registro, como LocalMachine, que es la que en este ejemplo usaremos, adems 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 ingls:http://msdn.microsoft.com/library/en-us/cpref/html/frlrfmicrosoftwin32registrymemberstopic.aspy esta en espaol:http://msdn.microsoft.com/library/spa/cpref/html/frlrfmicrosoftwin32registrymemberstopic.asp Mediante los mtodos estticos de la clase Registry podremos acceder a los mtodos que nos permitirn hacer las manipulaciones pertinentes. Por ejemplo, podemos usar el mtodo OpenSubKey para abrir una clave y posteriormente aadir una nueva entrada o para leer una existente.En este ejemplo usaremos OpenSubKey para abrir la clave, este mtodo 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 ms 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 tambin podremos acceder a otra informacin, como el nmero de subclaves o un array con los valores o las subclaves de la clave indicada.Para ms informacin sobre la clase RegistryKey y los miembros de esa clase... como es habitual, en la documentacin de Visual Studio .NET:ms-help://MS.MSDNQTR.2003FEB.3082/cpref/html/frlrfmicrosoftwin32registrykeyclasstopic.htmAhora pasemos a ver el cdigo de la aplicacin de ejemplo, en este proyecto de lnea de comandos, podremos indicar la clave y el valor que queremos asignar, eliminar o recuperar. Para ello indicaremos como primer parmetro la accin a realizar: /A (asignar), /R (recuperar), /E (eliminar), a continuacin 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 parmetro indicaremos el valor que queremos asignar.En el caso de que usemos valores o claves con espacios, stos se indicarn dentro de comillas dobles, ya que los parmetros de la lnea de comandos se interpretan como valores diferentes los que estn separados por espacios.Un poco ms abajo tienes el cdigo tanto para Visual Basic .NET como para C#.No incluyo ningn proyecto ya que no hace falta, incluso podras compilar el cdigo usando la lnea de comandos, simplemente usando el compilador del lenguaje que elijas (vbc o csc) seguido del nombre del fichero en el que hayas guardado el cdigo que te muestro.Espero que te sea de utilidad.Nos vemos.GuillermoP.S.Pulsa aqu, si quieres saber cmo hacer esto mismo pero en Visual Basic 6.0

El cdigo para VB .NET'------------------------------------------------------------------------------' registroWindowsInicioVB (04/Feb/04)' Poner nuestra aplicacin en el registro para que se inicie automticamente' tambin se comprobar si ya est y cmo quiitarla.'' Guillermo 'guille' Som, 2004'------------------------------------------------------------------------------Option Strict On

Imports Microsoft.VisualBasicImports SystemImports Microsoft.Win32

Module Module1 Sub Main(ByVal args() As String) ' En la lnea de comandos se indicar la clave y el valor ' El valor ser el "path" completo de la aplicacin ' que queremos incluir en el registro dentro de la clave indicada ' En el primer parmetro indicaremos la accin a realizar: ' /A Aadir o modificar una clave ' /E Eliminar la clave indicada ' /R Recuperar el valor de la clave indicada, tambin se puede usar /M ' Recuerda que en este cdigo siempre se manejar la clave Run: ' HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run ' Dim msg As String = String.Format("Para usar esta aplicacin debes indicar:{0}" & _ "Para aadir 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 ' es que no se ha indicado el ltimo parmetro 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 aadi / 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 aplicacin 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) ' aadirlo al registro ' Si el path contiene espacios se debera 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 aplicacin indicada ' Devuelve True si todo fue bien, False en caso contrario ' Si la aplicacin no estaba en Inicio, devuelve True salvo que se produzca un error ' Try 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

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 programaIniciar un nuevo proyecto Windows form , agregar dos controles Button al Form1.Pegar el Cdigo fuente:Texto planoImprimir1. OptionExplicitOn2. OptionStrictOn3. 4. ImportsMicrosoft5. ImportsMicrosoft.Win326. ImportsMicrosoft.Win32.Registry7. 8. PublicClassForm19. 10. PrivateFunctionstart_Up(ByValbCrearAsBoolean)AsString11. 12. 'clavedelregistropara13. 'colocarelpathdelejecutableparainiciarconwindows14. ConstCLAVEAsString="SOFTWARE\Microsoft\Windows\CurrentVersion\Run"15. 16. 'ProductName:elnombredelprograma.17. DimsubClaveAsString=Application.ProductName.ToString18. 'Mensajepararetornarelresultado19. DimmsgAsString=""20. 21. Try22. 'Abrelaclavedelusuarioactual(CurrentUser)parapoderextablecereldato23. 'silaclaveCurrentVersion\Runnoexistelacrea24. DimRegistroAsRegistryKey=CurrentUser.CreateSubKey(CLAVE,RegistryKeyPermissionCheck.ReadWriteSubTree)25. 26. WithRegistro27. 28. .OpenSubKey(CLAVE,True)29. 30. SelectCasebCrear31. 'Crear32. ''''''''''''''''''''''33. CaseTrue34. 'EscribeelpathconSetValue35. 'Valores:ProductNameelnombredelprogramayExecutablePath:larutadelexe36. .SetValue(subClave,_37. Application.ExecutablePath.ToString)38. Return"Ok..claveaadida"39. 'Eliminar40. ''''''''''''''''''''''41. 'EliminalaentradaconDeleteValue42. CaseFalse43. If.GetValue(subClave,"").ToString""Then44. .DeleteValue(subClave)'eliminar45. msg="Ok..claveeliminada"46. Else47. 48. msg="Noseelimin,porqueelprograma"&_49. "noiniciabaconwindows"50. EndIf51. EndSelect52. EndWith53. 'Error54. ''''''''''''''''''''''55. CatchexAsException56. msg=ex.Message.ToString57. EndTry58. 'retorno59. Returnmsg60. EndFunction61. 62. PrivateSubButton1_Click(_63. ByValsenderAsSystem.Object,_64. ByValeAsSystem.EventArgs)HandlesButton1.Click65. 'crear66. MsgBox(start_Up(True))67. EndSub68. 69. PrivateSubForm1_Load(_70. ByValsenderAsSystem.Object,_71. ByValeAsSystem.EventArgs)HandlesMyBase.Load72. Button1.Text="Iniciarconwin.."73. Button2.Text="Noiniciar"74. EndSub75. 76. PrivateSubButton2_Click(_77. ByValsenderAsSystem.Object,_78. ByValeAsSystem.EventArgs)HandlesButton2.Click79. 80. 'Eliminar81. MsgBox(start_Up(False))82. EndSub83. EndClass

28/4/2009Como leer y escribir en el Registro de Windows desde una aplicacin .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. Despus 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 lneas est el cdigo, uno de los ejemplos ms 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 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 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 slo 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 Multilnea End If End SubEnd Class

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", "ContraseaFTP", 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)