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)