Está en la página 1de 24

Tutorial de vbscript

Temas

by

Novlucker

Introduccin - pdf 1,2 Operadores Esctructuras de control If Case For !ile "o #ane$o de ob$etos Filesyste%ob$ect&F'O( - pdf 1, 2 )s!'!ell )s!Net)ork - pdf 1, 2 "ictionary - pdf 1, 2 Co%%ondialo* - pdf 1, 2
'e ir+n a,adiendo nuevos ob$ectos para descar*a en pdf

-ueno, pri%ero aclarar .ue este tutorial, pretende e/plicar de %anera b+sica las distintas instrucciones aplicadas en visual basic script &vbs de a.u0 en %+s(, para .ue as0 de este %odo, todos a.uellos interesados en este len*ua$e de scriptin*, ten*an la posibilidad de co%en1ar a desarrollar sus pe.ue,os scripts2 Introduccin: 3ara e%pe1ar, debe%os decir, .ue los vbs, tal y co%o lo dice su no%bre, son 4si%ples4 scripts, .ue se e$ecutan por %edio de un int5rprete en el siste%a, con lo .ue bastar+ con crear el cdi*o en un si%ple bloc de notas &o si%ilar(, y *uardarlo con e/tensin *.vbs, sin necesidad de reali1ar nin*una co%pilacin &aun.ue e/iste la posibilidad(2 En este caso el int5rprete es, el Windows Script Host de #icrosoft, por lo .ue estar+ presente &aun.ue en distintas versiones( de %anera predeter%inada desde in 67 en adelante, as0 .ue podre%os !acer uso de estos arc!ivos en pr+ctica%ente, todos los indo)s2 'e puede decir .ue los vbs son una %e$ora con respecto a los bat, ya .ue estos per%iten una %ayor interaccin con el siste%a operativo, y decir ade%+s .ue este len*ua$e, es un derivado de Visual Basic, por lo .ue desde un principio y aun.ue de %anera %uc!o %+s li%itada, se podr+ fa%iliari1ar con dic!o le*ua$e &la sinta/is es si%ilar en todos los aspectos(2 A tener en cuenta antes de comenzar: 8 En vbs no i%portan las %ay9sculas o %in9sculas :-script ; vbscript 8 3ara indicar un final de l0nea, no se debe de !acer %+s .ue pasar a la si*uiente &no es necesario ter%inar con por e$e%plo 4 < 4 co%o en $avascript( 8 =os co%entarios, van precedidos de una 4 > 4 &co%illa si%ple( > Esto es un co%entario 8 No es obli*atorio declarar las variables, aun.ue es conveniente !acerlo para de$ar %+s le*ible el

cdi*o 'e pueden declarar utili1ando im, o bien, se les da valor directa%ente2 im nuestravariable Ta%bi5n puede ser utili1ado !ption e"plicit para as0 4obli*arse4 a declarar las variables &en los pe.ue,os e$e%plos lo !ar5 as0( En la %ayor0a de los e$e%plos utili1ar5 la funcin ms#bo", la cual se encar*a de %ostrar un %ensa$e en pantalla2 Tipos de dato: E/isten varios tipos de datos .ue pueden %ane$arse en vbs, y los .ue %+s va%os a utili1ar, son < -ooleano, -yte, Fec!a, "ouble, Entero, Entero lar*o, Ob$eto, 'in*le, Cadena2 Todos estos representan valores verdadero?falso, fec!a?!ora, n9%erosentero positivo?ne*ativo, cadena de te/to &no creo necesite %+s e/plicacin .ue esta(2 !peradores: Tendre%os varios tipos de operadores a nuestra disposicin2 12 @rit%5ticosA 'u%a&B(, Cesta&-(, #ultiplicacin&D(, "ivisin deci%al&?(, "ivisin entero&E(, 3otencia&F(, Cesto divisin&%od( 22 Co%paracinA I*ual&;(, "istinto&GH(, #ayor&H(, #enor&G(, #enos o i*ual&G;(, #ayor o i*ual&H;( I2 =*icosA J&and(, O&or(, Kor, No&not( L2 "e cadenaA Concatenacin&M( Estos !an sido a *randes ras*os, los operadores a utili1ar en vbs, por lo .ue despu5s, y !aciendo uso de nuestro pr/i%o te%a &estructuras de control(, se %ostrar+n al*unos e$e%plos2 $structuras de control: 12 I% &condicional' Esta se utili1a para evaluar 2 o %+s posibles resultados, en virtud del cual, se to%ar+n diferentes acciones2 Citar "i% valor :alor ; 7 If valor G 1N t!en #s*bo/ 4El valor es #ENOC a die1 4 Else #s*bo/ 4El valor es #@JOC a die1 4 End if Co%o se ve en este e$e%plo se co%ien1a declarando la variable (valor(, lue*o de esto, se le asi*na el valor ), y posterior a esto, se eval9a dic!o valor &!aciendo uso de los operadores de co%paracin vistos anterior%ente(, por lo .ue si el valor es %enor a *+, se %ostrar+ un %ensa$e en pantalla indicando .ue es #ENOC, de lo contrario, el %ensa$e indicar+ #@JOC &en este caso le !ab0a%os asi*nado el valor 7, por lo .ue ser+ %enor(2

22 ,ase &condicional' En el caso del IF, si bien no se !a %ostrado, e/iste la posibilidad de anidar dos o %+s, para as0 reali1ar varias evaluaciones, pero el caso es .ue cuando se reali1an %uc!as, el cdi*o puede volverse al*o en*orroso2 Es en estos casos, donde recurri%os al select case2 Citar "i% nu%ero nu%ero ; 7 'elect case nu%ero case O %s*bo/ 4El valor es seis 4 case P %s*bo/ 4El valor es siete 4 case 7 %s*bo/ 4El valor es oc!o 4 End select @l i*ual .ue en el anterior, en este e$e%plo, se co%ien1a definiendo la variable 4nu%ero4, y se le asi*na ) co%o valor2 =ue*o con select case se indica .ue es lo .ue se va a revisar, en este caso, cuanto es el valor de 4nu%ero4, lue*o, se indican las opciones con un case por cada una de ellas, en este caso, 4case O4, en el caso de .ue el valor sea O, 4case P4, y 4case 74, para el caso de .ue el valor sea P y 7 respectiva%ente &co%o sabe%os es 7(, es decir, 4si es O4, %ensa$e 4El valor es seis4, 4si es P4, %ensa$e 4El valor es siete4, y 4si es 74, %ensa$e 4El valor es oc!o42 I2 %!- &bucle' El for es utili1ado cuando .uere%os repetir una deter%inada accin un cierto n9%ero de veces2 Citar "i% i For i;1 to Q step 1 #s*bo/ 4El valor de i esA 4 M i Ne/t Co%en1a%os definiendo la variable 4i4, lue*o de esto, iniciali1a%os el bucle for, es decir, deci%os .ue< desde 4i4 i*ual *, a 4i4 i*ual ., incre%entando de a *, %ostrare%os un %ensa$e con la frase 4El valor de i esA 4 y lue*o de esto, el valor real de 4i4, por lo .ue en cada 4paso4 .ue de nuestro bucle, %ostrar+ al*o %+s o %enos as0R

Co%o ven, Q %ensa$es 4casi4 i*uales, ya .ue la secuencia se repite Q veces, y lo 9nico .ue ca%bia es el valor de 4i4 &la !e%os concatenado al %ensa$e con el car+cter M(, ya .ue va to%ando distintos valores en cada uno de los 4pasos42 L2 %!- $A,H&bucle' El for eac!, tiene la particularidad de .ue es un for .ue recorre todos los ele%entos de una coleccin o vector2 @ntes de continuar, intentar5 e/plicar lo .ue es un 4array4, ya .ue ser+ lo .ue utilice%os en el e$e%plo2 Sn arra/ o matriz, es una estructura de datos en for%a de variable, .ue per%ite al%acenar %+s de un 9nico valor, dentro de una 9nica variable2 3ara acceder a cada uno de estos valores, ser+ necesario !acer uso de 0ndices2 Citar

"i% no%bres&2( no%bres&N(; 4#art0n4 no%bres&1(; 43ablo 4 no%bres&2(; 4Carlos 4 #s*bo/ no%bres&1( En este e$e%plo, se define la variable 4no%bres4 .ue tendr+ espacio para I valores &tener en cuenta .ue co%ien1a por N, por eso .ue se pon*a 2(, y lue*o, se definen cada uno de los valores de 4no%bres42 3or 9lti%o utili1a%os un %ensa$e, para %ostrar el valor del 0ndice 1 del array, con el si*uiente resultadoR

Co%o se ve, el %ensa$e %uestra el no%bre 43ablo4 por.ue al lla%ar al array, !e%os puesto el 0ndice 1, y co%o se ve cuando lo declara%os, le !ab0a%os asi*nado valor 43ablo4, en el caso de indicar 2 en lu*ar del 1, el %ensa$e %ostrar0a 4Carlos42 Espero esto !aya .uedado lo suficiente%ente claro2 @!ora, volviendo al For eac! &espero ya no te !ayas olvidado(, este podr0a ser utili1ado en el caso del array &!ay otros casos(2 Citar "i% no%bres "i% n no%bres ; array&4#art0n4,43ablo4,4Carlos4( For eac! n in no%bres #s*bo/ n ne/t @ pesar de .ue no lo pare1ca, es %uy si%ilar al anterior, y al*unos estar+n diciendo, 4.ue ten0a .ue ver el array con esto4, pero si se fi$an, sola%ente !e %ostrado, una se*unda %anera de declarar el array2 En este caso, en lu*ar de ir %etiendo cada uno de los valores con sus respectivos 0ndices, declaro el array en una sola l0nea y va .uedando or*ani1ado se*9n el orden en el .ue %eta los valores, por eso, 4#art0n4 .uedar+ en el lu*ar N, 43ablo4 en el lu*ar 1, y 4Carlos4, en el lu*ar 2, al i#ual .ue en el caso anterior2 Esto con respecto al array, a!ora a lo .ue 0ba%os, el for eac!2 En l0neas si*uientes co%en1a%os con el for, y deci%os, por cada 4n4 &la letra, en este caso 4n4 la ele*i%os nosotros( en 4no%bres4 &es un array .ue contiene tres no%bres(, %ensa$e con el 4n4, o lo .ue es i*ual, por cada no%bre, en el 4contenedor4 (nombres(, %ensa$e con el no%bre, y el resultado es el si*uienteR

Tanto en 0or si%ple, co%o en el 0or eac1, pode%os !acer uso de e"it 0or, para parar la e$ecucin del for co%pleta2 3ara decirlo de otra %anera, con esto escapa%os al for2 TI=E &bucle( El bucle )!ile, es utili1ado cuando .uere%os .ue una deter%inada accin se repita %ientras una deter%inada condicin de cu%pla2 Citar "i% nu%ero

Nu%ero ; 1 !ile nu%ero G; 1N #s*bo/ nu%ero nu%ero ; nu%ero B 1 end Co%en1a%os el e$e%plo declarando la variable nu%ero, y le asi*na%os valor 1N, lue*o e$ecuta%os bucle, %ientras el valor de 4nu%ero4 sea %enor o i*ual a 1N, %ostra%os %ensa$e con el valor de nu%ero, y ade%+s le su%a%os 1 al propio valor de nu%ero &de este %odo lo utili1a%os a %odo de contador(, lue*o de 1N veces de %ostrar %ensa$e, el valor de 4nu%ero4 ser+ i*ual a ** y al verificarse la condicin esta no se cu%plir+, por lo .ue ter%inar+2 Q2 ! &bucle' El bucle do tiene varias opciones, pero b+sica%ente !ar+ al*o, 4%ientras4, o 4!asta .ue4 ocurra al*o2 Citar "o #s*bo/ 4Esto es un %ensa$e4 =oop Este bucle, se repetir+ al infinito, por lo .ue %ostrar+ un %ensa$e, inter%inables veces2 @!ora bien, este do, puede ser %odificado, para tener al*o %+s de control sobre 5l, y es $usta%ente !aciendo uso de esas condiciones .ue co%entaba antes, 4%ientras4, o 4!asta .ue4 Citar "i% a ; 1 "o until a;1N #s*bo/ 4Esto es un %ensa$e4 =oop Este cdi*o se resu%e en< %ensa$e de 4Esto es un %ensa$e4 !asta .ue 4a4 sea i*ual a 1N2 En lu*ar de until podr0a utili1arse w1ile, para ca%biar la condicin a %ensa$e de 4Esto es un %ensa$e4 %ientras 4a4 sea distinta de 1N2 Citar "i% a ; 1 "o )!ile aGH1N #s*bo/ 4Esto es un %ensa$e4 =oop J ta%bi5n puede utili1arse until y w1ile, antes o despu5s de e$ecutarse el bucle Citar "o until?)!ile condicin &es distinta se*9n sea until o )!ile( #s*bo/ 4Esto es un %ensa$e4 =oop until?)!ile Co%o se ve, este bucle nos per%ite darle varios usos se*9n nos conven*a, por lo .ue ter%ina siendo %uy vers+til y 9til2 @l i*ual .ue para los 0or, en el caso de .uerer salir de un bucle do, ta%bi5n conta%os con una funcin de escape, en este caso, e"it do

@s0 ter%ina est+ pe.ue,a introduccin a las rutinas b+sicas de visual basic script, la idea es se*uir e/tendiendo este 4tuto4, co%o co%entario a*re*o ade%+s, .ue este len*ua$e posee %uc!isi%as funciones, las cuales no detallar5, ya .ue ser0a inter%inable, ade%+s de .ue %e centrar5 %+s adelante, en e/plicar funciones e/pecificas de ob$etos2 En el caso de .uerer %+s docu%entacin al respecto, se pueden descar*ar la docu%entacin sobre )indo)s script !ost, donde tendr+n la referencia a todas las funciones de las .ue pode%os !acer uso2 Windows Script ..2 ocumentation

#ane$o de ob$etos
@nterior%ente, !e intentado %ostrar las diferentes estructuras de control .ue nos per%iten enca%inar nuestros vbs, es por esto .ue a!ora, pasare%os a los O-UETO'2 Toda interaccin de vbs con el siste%a se basa en el %ane$o de ob$ectos &@ctiveK(, .ue no son %+s .ue librer0as especiali1adas y a nuestra diposicin, por lo .ue dependiendo de lo .ue bus.ue%os !acer, !are%os uso de una u otra &%e1clandolas en nuestros scripts( NotaA No !ar5 uso de di% para declarar variables en los e$e%plos, para as0 a!orrar espacio2 =os ob$etos b+sicos de los .ue se !ace uso son dosA 12 F'O &File'yste%Ob$ect(A %ane$o de unidades, arc!ivos y carpetas2 22 s!'!ellA acceso a infor%acin de siste%a, traba$o con el re*istro, %ane$o accesos directos, e$ecucin de aplicaciones2 @ntes de continuar debo de e/plicar .ue al traba$ar con los ob$etos, los %is%os se deben de declarar de la si*uiente %aneraA 'et variable ; createob3ect&ob$ecto( E$e%ploA 'et ob$fso ; createob$ect&4scriptin*2filssyste%ob$ect4( @!ora s0, pasa%os directa%ente al an+lisis del ob$eto F'O2 %S! &%ile S/stem !b3ect' =as distintas funciones .ue se pueden reali1ar a trav5s de este ob$eto sonA 8 -orrar, %over y copiar arc!ivos 8 =eer y escribir en arc!ivos de te/to &Crear( 8 Obtener y %odificar atributos de arc!ivos y carpetas 8 Crear, borrar, %over y copiar carpetas 8 Obtener propiedades de arc!ivos y carpetas 8 =istar subcarpetas 8 =istar discos y particiones 8 Obtener propiedades de discos y particiones 8 Obtener deter%inadas rutas de siste%a 4over arc1ivos

!b30so.move0ile ori#en5 destino E$e%ploA Cdi*o


Set objfso = createobject("scripting.filesystemobject") Objfso.movefile "C:\archivo.txt" "!:\Carpeta"

Borrar arc1ivos !b30so.delete0ile arc1ivo E$e%ploA Cdi*o


Set objfso = createobject("scripting.filesystemobject") Objfso."eletefile "C:\archivo.txt"

,opiar arc1ivos !b30so.cop/0ile ori#en5 destino5 sobreescribir E$e%ploA Cdi*o


Set objfso = createobject("scripting.filesystemobject") Objfso.copyfile "C:\archivo.txt" "!:\"estino.txt" tr#e

,rear carpetas Set variable 6 ob30so.create0older&destino carpeta' E$e%ploA Cdi*o


Set objfso = createobject("scripting.filesystemobject") Set micarpeta = objfso.createfol"er("C:\carpeta")

4over carpetas !b30so.move0older ori#en5 destino E$e%ploA Cdi*o


Set objfso = createobject("scripting.filesystemobject") Objfso.movefol"er "C:\Carpeta" "!:\!estino"

Borrar carpetas !b30so.delete0older carpeta

E$e%ploA Cdi*o
Objfso."eletefol"er "C:\Carpeta"

,opiar carpetas !b30so.cop/0older ori#en5 destino5 sobreescribir E$e%ploA Cdi*o


Set objfso = createobject("scripting.filesystemobject") Objfso.copyfol"er "C:\Carpeta" "!:\!estino" tr#e

7eer / escribir en arc1ivos 3ara el %ane$o de arc!ivos de te/to, debe%os de tener en cuenta, la e/istencia o no del arc!ivo, y el %odo en el .ue accede%os a 5l2 Obvia%ente, si un arc!ivo no e/iste, no podr5%os acceder a 5l, y a su ve1, si abri%os un arc!ivo en %odo de l5ctura, nunca podre%os escribir dentro2 ,rear arc1ivos de te"to / escribir en ellos Set variable 6 ob30so.createte"t0ile&ruta5 sobreescribir' E$e%ploA Cdi*o
Set objfso = createobject("scripting.filesystemobject") Set archivotexto = objfso.createtextfile("C:\archivo.txt" tr#e) $creamos el archivo archivotexto.%riteline "&ste es el texto '#e estoy escribien"o" $escribimos #na linea archivotexto.%riteblan(lines()) $escribimos ) lineas en blanco archivotexto.%riteline "*'#i mas texto" $ escribimos otra linea "e texto archivotexto.close $cerramos el archivo

Notese .ue al co%en1ar, !e%os creado el arc!ivo y lo !e%os asi*nado a una variable, lue*o !e%os utili1ado el identificador de arc!ivo &variable(, para escribir dentro de 5l, en este caso, !e%os utili1ado )riteline, .ue escribe una l0nea, y a*re*a un retorno de carro para .ue si volve%os a escribir, lo !a*a%os en una nueva l0nea, en ca%bio , si en su lu*ar, utili1a%os )rite, el resultado, ser+ .ue no !abr+ salto de l0nea, por lo .ue todas las oraciones iran .uedando una detr+s de la otra2 3or 9lti%o, !e%os cerrado el arc!ivo2 Abrir arc1ivos de te"to / escribir en ellos Set variable 6 ob30so.opente"t0ile&ruta5 modo5 creacin'

E$e%ploA Cdi*o
Set objfso = createobject("scripting.filesystemobject") Set archivotexto = objfso.opentextfile("C:\archivo.txt" + tr#e) $abrimos el archivo archivotexto.%riteline "&ste es el texto '#e estoy escribien"o" $escribimos #na linea archivotexto.close $cerramos el archivo

Co%o se puede ver, al abrir el arc!ivo, !e%os indicado la ruta, el %odo 7 .ue se utili1a para appendin* o escritura al final de arc!ivo, y true, .ue .uiere decir .ue en caso de .ue no e/ista el arc!ivo se cree, es decir .ue de este %odo, no solo abri%os el arc!ivo, sino .ue de no e/istir, dic!o arc!ivo ser+ creado en el proceso2 3ara tener en cuenta, los %odos en los .ue se puede abrir un arc!ivo sonA 1- #odo =ECTSC@ 2- #odo E'CCITSC@ &escribe al principio( 7- #odo @33EN"INV &escribe al final( Co%o se puede ver, al abrir el arc!ivo, !e%os indicado la ruta, el %odo 7 .ue se utili1a para appendin* o escritura al final de arc!ivo, y true, .ue .uiere decir .ue en caso de .ue no e/ista el arc!ivo se cree, es decir .ue de este %odo, no solo abri%os el arc!ivo, sino .ue de no e/istir, dic!o arc!ivo ser+ creado en el proceso2 7eer desde arc1ivos de te"to @s0 co%o abri%os arc!ivos y pode%os escribir en ellos, ta%bi5n e/iste la posibilidad de leer desde ellos, para lo cual utili1are%os readline, y readall2 Co%o se puede i%a*inar, con readline ire%os leyendo una a una las l0neas del arc!ivo &cada ve1 .ue pon*a%os readline leere%os solo una(, con este, lee%os una l0nea, y el puntero se situa al final de la l0nea, para .ue a la pr/i%a e$ecucin de esta funcin, sea la l0nea si*uiente la .ue sea le0da2 Con readall en ca%bio, leere%os el total de arc!ivo2 E/iste ade%+s una funcin lla%ada skipline, con la cual saltare%os la lectura de una l0nea2 E$e%ploA Cdi*o
Set objfso = createobject("scripting.filesystemobject") Set archivotexto = objfso.opentextfile("C:\archivo.txt" ,) archivo msgbox archivotexto.rea"line linea la primera archivotexto.s(ipline $saltamos #na linea msgbox archivotexto.rea"line linea la tercera archivotexto.close $cerramos el archivo $abrimos el $leemos #na

$leemos #na

Atributos de arc1ivos / carpetas @ continuacin e/plicar5 el %5todo %ediante el cual, se puede obtener, o bien ca%biar, los atribuos

de arc!ivos y carpetas &es pr+ctica%ente i*ual para a%bas cosas( !btener atributos Set variable 6 ob30so.#et0ile&ruta' variable.attributes E$e%ploA Cdi*o
Set objfso = createobject("scripting.filesystemobject") Set archivo = objfso.getfile("C:\t#torial.p"f") $obtenemos el control sobre el archivo p"f -sgbox archivo.attrib#tes $mensaje con los attrib#tos "el archivo

En este e$e%plo ve%os .ue lue*o de declarar el ob$eto, lo .ue !ace%os es obtener el control del el arc!ivo tutorial2pdf, para lo cual utili1a%os *etfile, y asi*na%os el arc!ivo a la variable arc!ivo2 =ue*o, y ya con el arc!ivo en la variable, pode%os utili1arlo directa%ente para %ostrar sus atributos, .ue no ser+ %+s .ue un n9%ero .ue en*lobar+ todas las constantes de los atributos2 =as constantes .ue !acen referencia a los atributos de arc!ivo sonA Valor 0 1 2 4 8 16 32 64 128 Atributo Normal Solo Lectura Oculto Sistema Letra de disco Carpeta/directorio Archivo Lin o acceso directo Comprimido

Co%o co%entaba antes, attributes devolver+ un valor 9nico .ue ser+ la su%atoria de cada uno de los valores para cada atributo del arc!ivo2 Co%o e$e%ploA Sn arc!ivo .ue ten*a atributos de< solo lectura, oculto, de siste%a, y de arc!ivo, tendr+ un valor de 1B2BLBI2; I6 ,ambiar atributos Set variable 6 ob30so.#et0ile&ruta' variable.attributes 6 sumaatributos E$e%ploA Cdi*o
Set objfso = createobject("scripting.filesystemobject") Set archivo = objfso.getfile("C:\t#torial.p"f") $obtenemos el control sobre el archivo p"f archivo.attrib#tes = ./ $attrib#to "earchivo y oc#lto

El ca%biar atributos consiste si%ple%ente en asi*nar un valor a attributes2

En el e$e%plo anterior !e puesto co%o valor IL .ue representa atributos de arc!ivo y oculto2 8ropiedades de arc1ivos / carpetas @s0 co%o pode%os obtener y %odificar los atributos de los arc!ivos y carpetas, pode%os acceder a deter%inadas propiedades de los %is%os, entre ellasA 8 No%bre< na%e 8 No%bre corto< s!ortna%e 8 Ta%a,o< 'i1e 8 Cuta co%pleta< pat! 8 Cuta corta< s!ortpat! 8 Fec!a de creacin?%odificacin?9lti%o acceso< datecreated, datelast%odified, datelastaccessed 8 Tipo de arc!ivo< type 8 Carpeta contenedora< parentfolder Estas son las principales propiedades a las .ue pode%os acceder, lo cual se !ar+ de la si*uiente for%aA Set variable 6 ob30so.#et0ile&ruta' 4s#bo" variable.propiedad E$e%ploA Cdi*o
Set objfso = createobject("scripting.filesystemobject") Set archivo = objfso.getfile("C:\t#torial.p"f") $obtenemos el control sobre el archivo p"f -sgbox archivo.si0e $tamano "el archivo en bytes

3ara obtener otras propiedades, si%ple%ente ser0a cuestin de ca%biar 4si1e4 por al*una de las otras propiedades a las .ue tene%os acceso &les reco%iendo probar con cada una para ver los resultados(, y de i*ual %anera, se !ar0a con carpetas en lu*ar de arc!ivos, para lo .ue sola%ente tendr0a%os .ue ca%biar *etfile, por *etfolder2 7istar subcarpetas Con listar subcarpetas, nos referi%os a, acceder a la coleccin de subcarpetas de una carpeta 4K4, para traba$ar con cada una de ellas de %anera independiente2 Cuando !abla%os de coleccin, !ace%os referencia a un array, en el .ue est+n todos los ele%entos contenidos en un deter%inado 4listado42 Set variable 6 ob30so.#et0older&ruta' Set subvariable 6 variable.sub0olders E$e%ploA Cdi*o
Set objfso = createobject("scripting.filesystemobject") Set micarpeta = objfso.getfol"er("C:\Carpeta") $obtenemos el control sobre la carpeta Set s#bcarpetas = micarpeta.s#bfol"ers $obtenemos la coleccion "e s#bcarpetas 1or each s in s#bcarpetas $por ca"a carpeta(s) en

la coleccion(s#bcarpetas) -sgbox s.name 2ext s#bcarpeta

$mensaje con el nombre $pasamos a la sig#iente

-ueno, co%o se ve en este caso, el acceder a las subcarpetas no es total%ente directo, sino .ue, en un principio, obtene%os la coleccin &array( de carpetas, para lue*o traba$ar con cada una de ellas por %edio de un for .ue recorre toda la coleccin2 @l listar subcarpetas, se debe de terner en cuenta ade%+s, .ue la coleccin, sola%ente contiene, las carpetas del pri%er nivel, y no las .ue se encuentran en los niveles consi*uientes, para .ue .uede %+s claroA CAEcarpeta CAEcarpetaEnivel1 CAEcarpetaEnivel1Enivel2 'i lista%os la coleccin de subcarpetas en la carpeta 4CAEcarpeta4, obtendre%os todas las del nivel 1, pero no las del nivel 2, para eso, deber0a%os de i%ple%entar otro for .ue !a*a referencia a estas2 7istar discos9particiones @l i*ual .ue para listar subcarpetas, para listar discos y particiones lo !are%os a traves de una coleccin, por lo .ue en realidad, ser+ %uy si%ilar al punto anterior2 Set variable 6 ob30so.#et0older&ruta' Set discos 6 variable.drives E$e%ploA Cdi*o
Set objfso = createobject("scripting.filesystemobject") Set "iscos = objfso."rives $obtenemos la coleccion "e "iscos 1or each " in "iscos $por ca"a "isco(") en la coleccion("iscos) -sgbox "."riveletter $mensaje con la letra "e "isco 2ext $pasamos al sig#iente "isco

Co%o ya se !ab0a dic!o, el %5todo de listar los discos y particiones, es el %is%o .ue para obtener las subcarpetas de una carpeta, por lo .ue no deber0a de presentar nin*9n proble%a el !acerlo2 Ta%bi5n aclarar, .ue en el anterior e$e%plo, solo !e inclu0do una propiedad .ue no se !ab0a visto anterior%ente, y esta es la de driveletter, y .ue co%o ya se !abr+n dado cuenta, !ace referencia a la letra .ue tiene asi*nado el disco o particin en el site%a, por lo .ue una ve1 %encionado esto, pasare%os $usta%ente, a identificar, cuales son las propiedades de disco a las .ue tendre%os acceso2 8ropiedades de disco Co%o !e%os visto en el anterior punto, a traves del ob$ecto F'O es posible acceder a la coleccin de discos, as0 co%o a sus propiedades, siendo estas propiedades, las si*uientesA

8 8 8 8 8 8 8 8 8 8 8 8

=etra< driveletter No%bre del disco< volu%ena%e Espacio disponible< availablespace Espacio libre< freespace Espacio total< totalsi1e "isponibilidad< isready Cuta< pat! 'iste%a de fic!eros &NTF', F@T, C"F'(< filesyste% Carpeta principal< rootfolder N9%ero de serie< serialnu%ber No%bre co%partido< s!arena%e Tipo de disco< drivetype

E$e%plo, no pondr5 en este caso, ya .ue es ser0a i*ual al .ue !e puesto anterior%ente2 3or otra parte, sola%ente profundi1ar5 en una de las propiedades de los discos &creo .ue las otras son facil%ente identificables(, y es $usta%ente, la 9lti%a .ue !e enu%erado, drivetype2 El tipo de disco de un disco &val*a la redundancia(, puede estar entre los si*uientesA Valor 0 1 2 3 4 ! Tipo "n no#n/$esconocido %emova&le/%emovi&le 'i(ed/%)*ido Net#or /%ed C$+%om %A, $is

Ta%bi5n !e de acotar, .ue la dis.uetera &Snidad @(, es reconocida co%o disco e/tra0ble, as0 co%o ta%bi5n ocurre, con las unidades virtuales, e$< a.uellas carpetas %ontadas con el co%ando 'S-'T de %s-dos2 -utas de carpetas 3or 9lti%o, pero no %enos i%portante, debo de co%entar .ue el ob$ecto F'O, per%ite obtener la ruta de tres de las carpetas %+s i%portantes del siste%a, co%o lo sonA 8 indo)s &N( 8 'yste%I2 &1( 8 Te%p &2( 3ara acceder a ellas, !are%os uso de la funcin *etspecialfolder2 Set variable 6 ob30so.#etspecial0older&constante' E$e%ploA Cdi*o
Set objfso = createobject("scripting.filesystemobject") Set micarpeta = objfso.getspecialfol"er(3) $obtenemos el control sobre la carpeta -sgbox micarpeta.path $mensaje con la r#ta "e la carpeta

Co%o se ve en e$e%plo, en este caso, nos !ace%os con el control de la carpeta de )indo)s, y lue*o

%ostra%os su ruta, para poder acceder a las carpetas, las constantes son las .ue !e indicado en un entre parentesis en un principio, al no%brar las carpetas2 -ueno, con esto !e%os ter%inado con el ob$eto F'O, pase%os entonces al se*undo y principal ob$eto, la s!ell2 S1ell &wscript.s1ell' @ trav5s de este ob$eto pode%os entre otras cosasA 8 #ostrar %ensa$es te%pori1ados 8 =eer, borrar, y escribir en el re*istro de )indo)s 8 E$ecutar aplicaciones &dos %5todos( 8 Obtener el foco de una ventana 8 Enviar pulsaciones de teclado 8 @cceder %ultiples carpetas de siste%a 8 Obtener variables del siste%a 8 Crear accesos directos 4ostrar mensa3es temporizados Esta es la %enos i%portante de todas las funciones de este ob$eto, pero no de$a de ser 9til en al*unas ocasiones, sobre todo, si no .uere%os .ue un proceso se blo.uee, solo por intentar %ostrar un %ensa$e2 3ara .ue .uede %+s claro, a lo lar*o de todos los e$e%plo .ue !e puesto, !e ido %ostrando deter%inados %ensa$es a traves de la funcin de %s*bo/ &opcin b+sica(2 =os %ensa$es *enerados con dic!a funcin, no salen de pantalla, !asta bien el usuario, no da click en el?los botones .ue tiene el cuadro de %ensa$e, por lo .ue en caso de utili1ar un %ensa$e de este tipo, la e$ecucin de nuestro script, se parar+ !asta bien este no sal*a de pantalla2 3ero en lu*ar de utili1ar este tipo de %ensa$e, pode%os !acer uso de una %ensa$e popup, la cual desaparecer+ sola al cabo del tie%po .ue !aya%os especificado, lue*o de lo cual, continuar+ la e$ecucin del script2 #odo en el .ue se e%plea esta ventanaA Variablemensa3e 6 variable.popup&te"to5 tse#undos5 t:tulo5 botones' E$e%ploA Cdi*o
Set objshell = createobject("4script.shell") rmensaje = objshell.pop#p("&ste es #n mensaje "e pr#eba" . "-ensaje 5op#p" 6/)

El resultado<

3ara e%pe1ar, se puede apreciar .ue el ob$eto s!ell, se declara con script2s!ell, y bueno, lo referente al %ensa$e, creo .ue una i%a*en dice %+s .ue %il palabras, !e%os %ostrado un %ensa$e en pantalla, el cual al cabo de I se*undos, desaparecera y dar+ paso al resto de nuestro script2 'i se !a %irado detenida%ente, se notar+ .ue para los 4botones4 !e puesto el valor OL, este valor, !ace referencia a la su%atoria de los botones e iconos .ue aparecen en la ventana de %ensa$e, siendo los %is%osA Botones:

Valor 0 1 2 3 4 ! Iconos Valor 16 32 48 64

Descripcin OO- . Cancelar A&ortar/ %eintentar e 0*norar Si/ No . Cancelar Si . No %eintentar . Cancelar

Descripcin 1arar/2rror 1re*unta 2(clamaci3n 0n4ormaci3n

En el caso de %i %ensa$e, el OL corresponde a la su%a del botn de ok &cero( y el icono de infor%acin &OL( 'i .uisiera%os %ostrar un %ensa$e de 'i, No y Cancelar, con un icono de pre*unta, deber0a%os de poner co%o valor el n9%ero IQ &IBI2(2

3or otro lado, ta%bi5n ve%os en el e$e%plo co%o el popup, se *uarda en una variable de no%bre r%ensa$e2 En dic!a variable, se *uarda el valor de la respuesta dada al %ensa$e, es decir, para el caso de un %ensa$e con los botones de 'i, No y Cancelar, la variable r%ensa$e *uardar0a el valor de cual de esos botones fue presionado por el usuario, siendo estas las posibilidadesA Valor 1 2 3 4 ! 6 5 Descripcin OCancelar A&ortar %eintentar 0*norar Si No

Es decir, .ue en caso de .ue la persona presione 'i, el resultado obtenido ser+ O, esto puede servirnos de %uc!o si .uere%os darle un poco de interactividad a nuestros scripts y to%ar diferentes ca%inos en virtud de las respuestas de los usuarios, lo cual puede ser utili1ado $unto a las funciones de %s*bo/ &para esta ta%bi5n valen los botones e iconos( e inputbo/, aun.ue a pesar de la %encin las vere%os en detalle, ya .ue no dependen de nin*9n ob$eto, y son de f+cil co%prensin2 7eer5 borrar / modi0icar el re#istro de windows 'in lu*ar a dudas, es una de las funciones %+s atractivas de este ob$eto, y su i%ple%entacin no i%plica nin*una dificultad, y a9n as0, la i%ple%entacin de esta funcin, no presenta nin*una dificultad2 7eer valores

variable.re#read&llave de re#istro' E$e%ploA Cdi*o


Set objshell = createobject("%script.shell") -sgbox objshell.regrea"("78C9\Soft%are\-icrosoft\4in"o%s\C#rrent:ersion\&xplorer\Shell 1ol"ers\-y 5ict#res") $va to"o en #na misma linea la llave es m#y larga

'encillo de entender, a trav5s del ob$eto s!ell lla%a%os a la funcin re*read, encar*ada de leer las llaves del re*istro, en este caso, !e optado por una llave un tanto lar*a, pero .ue contiene la ruta de la carpeta de 4%is i%+*enes4, al i*ual .ue en otros e$e%plos, %uestro el valor por %edio de un %s*bo/, pero co%o en todos los casos, es posible *uardar este valor en una variable para lue*o traba$ar con ella2 Borrar valores variable.re#delete&llave de re#istro' E$e%ploA Cdi*o
Set objshell = createobject("%script.shell") objshell.reg"elete("78C9\Soft%are\-icrosoft\4in"o%s\C#rrent:ersion\&xplorer\Shel l 1ol"ers\-y 5ict#res")

@l i*ual .ue para leer, el borrar cadenas no tiene nada de especial, sino .ue si%ple%ente debe%os de lla%ar a la funcin re*delete para des!acernos de la cadena en cuestin2 $scribir9modi0icar el re#istro @l*o .ue de se*uro le interesar+ a varios2 variable.re#write&llave de re#istro5 valor5 tipo de dato' E$e%ploA Cdi*o
Set objshell = createobject("%script.shell") objshell.reg%rite("78C9\Soft%are\-icrosoft\4in"o%s\C#rrent:ersion\5olicies\Syste m\!isable;as(-gr" , "<&=>!4O<!") $va to"o en #na misma linea la llave es m#y larga

En este e$e%plo, estar0a%os %odificando la llave del re*istro .ue des!abilita el ad%inistrador de tareas &task%*r(2 =os datos .ue debe%os de pasarle a esta funcin son< la llave a %odificar?crear claro esta, el valor .ue le dare%os, en %i e$e%plo !a sido 1, y el tipo de datos .ue esta%os in*resando2 Co%o %uc!os sabr+n, el re*istro de )indo)s soporta ciertos tipos de datos en las diferentes claves de las .ue !ace uso, a saberA

Tipo Descripcin %267S8 Cadena %267$9O%$ Num=rico %267:0NA%; :inario %2672<1AN$7S8 "na cadena e(pandi&le E/iste un .uinto tipo de datos, el CEVW#S=TIW'X, pero no es soportado por esta funcin2 Tener en cuenta .ue re*)rite puede tener proble%as con cadenas de%asiado lar*as, y considerar ta%bi5n, .ue tal co%o !e puesto en el t0tulo, re*)rite crear+ una llave en caso de no e/istir, y la %odificar+ en caso de .ue ya est5 presente2 Ta%bi5n !e de reco%endar .ue en caso de traba$ar con el re*istro se !a de tener %uc!o cuidado, y .ue .uererse de$ar el code %+s le*ible, se utilicen las si*uientes abreviaciones &lo !e !ec!o en %i e$e%plo(A Llave principal >-2;7C"%%2N?7"S2% >-2;7LOCAL7,AC>0N2 >-2;7CLASS2S7%OO? >-2;7"S2%S >-2;7C"%%2N?7CON'06 $3ecutar aplicaciones Co%o !e co%entado antes, a traves de este ob$eto e/isten dos %5todos diferentes de e$ecutar aplicaciones, los cuales ade%+s, tendr+n diferentes opciones y resultados2 4;todo -un Este es el %+s si%ple y usado de los dos %5todos2 variable.run rutapro#rama5 estadoventana5 espera E$e%ploA Cdi*o
Set objshell = createobject("%script.shell") Objshell.r#n "notepa"" , tr#e

Abreviacin >-C" >-L, >-C% >-2;7"S2%S >-2;7C"%%2N?7CON'06

En este caso e$ecuta%os el bloc de notas, en %odo nor%al, y establece%os, .ue el script se pause &true( !asta .ue se cierre la aplicacin &notepad(2 =os estados en los .ue se puede abrir la ventana, van del N al 1N, pasando por oculto, %a/i%i1ado y %ini%i1ado, entre otros, pero pasar5 de e/plicar cada uno de ellos ya .ue resulta %e$or opcin probar y ver el resultado, .ue lo .ue podr0a ser la e/plicacin2 =o .ue si cabe destacar, es el estado N &cero( o vb!ide, .ue e$ecuta una aplicacin en %odo oculto, sin %ostrar nin*9n tipo de ventana2 3robar por e$e%plo sustituyendo el n9%ero 1 por vb!ide en el e$e%plo .ue !e de$ado, para ver &en realidad no se ver+ nada( co%o se e$ecuta el notepad sin %ostrar nin*una ventana &si se ver+ el proceso en el ad%inistrador de tareas(2 Tener en cuenta ade%+s, .ue el estado de la ventana, y la espera del pro*ra%a, son total%ente opcionales , as0 .ue con poner si%ple%ente ob$s!ell2run 4notepad4 !ubiese alcan1ado2 4;todo $"ec

Este %5todo es %uy si%ilar al anterior, sola%ente .ue nos per%ite un %ayor control sobre la aplicacin .ue esta%os corriendo, con la e/cepcin de .ue no nos per%ite seleccionar estado de la ventana2 variable.e"ec&rutapro#rama' E$e%ploA Cdi*o
Set objshell = createobject("%script.shell") Objshell.&xec("notepa"")

Co%o ve%os, el %5todo en el .ue se e$ecuta la aplicacin es practica%ente i*ual al anterior, sola%ente !e%os sutitu0do run por e/ec y no !e%os pasado nin*9n par+%etro a la funcin, pero a!ora vea%os .ue es lo .ue o !ace diferente del otro %5todo2 8 'tatus 8 3rocessI" 8 Ter%inate 8 'tdin, 'tdout, 'tderr Estas ser0an las funciones .ue diferencian el e/ec del run, todas estas se aplican sobre la aplicacin? co%ando .ue esta%os e$cutando, por lo .ue, para !acer uso de esta funcionalidad, es necesario e$ecutar la aplicacin, y asi*nar la %is%a a una variable para lue*o traba$ar a traves de esta2 :ea%os esto, $unto a la e/plicacin de status y processid El status identifica el estado de la aplicacin e$ecutada, N &cero( representa una aplicacin en e$ecucin, y 1 &uno(, indentifica .ue la aplicacin fue cerrada y su proceso ya no se encuentra presente2 Con respecto al processid, creo .ue salta a la vista la funcin del %is%o, no es %+s .ue el identificador de proceso &3I"(2 E$e%ploA Cdi*o
Set objshell = createobject("%script.shell") Set bloc = Objshell.&xec("notepa"") -sgbox bloc.stat#s -sgbox bloc.processi"

En este e$e%plo, e$ecuta%os el bloc de notas, asi*nando su proceso a la variable 4bloc4, y lue*o %ostra%os dos %ensa$es, uno con el status &deber0a de ser N(, y otro con el n9%ero de proceso2 =a funcin status nos servir+ en definitiva, para poder %onitorear nuestro proceso, y reali1ar una deter%inada accin en funcin de si per%anece abierto, o bien, lo !an cerrado2 E$e%ploA Cdi*o
Set objshell = createobject("%script.shell") Set bloc = objshell.&xec("notepa"") !o %hile bloc.stat#s = 3 4script.sleep )33 $sirve para hacer #na pa#sa "e x milesimas "e seg#n"o loop msgbox "Se ha cerra"o el bloc "e notas"

3ase%os entonces a terminate Esta funcin, per%ite ter%inar el proceso .ue !ab0a%os iniciado, por lo .ue por su no%bre era f+cil predecirlo E$e%ploA Cdi*o
Set objshell = createobject("%script.shell") Set bloc = objshell.&xec("notepa"") 4script.sleep ?333 $5a#sa "e ?333 milesimas bloc.terminate o ? seg#n"os

@bri%os el bloc de notas, reali1a%os una espera de Q se*undos, y cerra%os el bloc de notas, f+cil2 3asando a!ora a las 9lti%as funciones de e/ec< stdin, stdout, stderr, debo de aclarar .ue estas funciones pueden ser utiles a la !ora de traba$ar en l0nea de co%andos, pero dado .ue en l0nea de co%andos !ay %e$ores %aneras &a %i criterio( de !acerlo, obviar5 la e/plicacin de dos de estas funciones, y solo le dar5 i%portancia a stdout .ue si puede facilitarnos la tarea en la e$ecucin de co%andos de %s-dos2 'tdout nos %uestra la salida de un los co%andos e$ecutados a traves de e/ec, y para .ue se entienda %e$or, pasare directa%ente a un22 E$e%ploA Cdi*o
Set objshell = createobject("%script.shell") Set ping = objshell.exec("cm" @c ping %%%.google.com") -sgbox ping.st"o#t.rea"all

El resultadoA

En este e$e%plo, !e%os e$ecutado un pin* a *oo*le a traves del c%d, y lue*o por %edio de stdout y su readall !e%os le0do el contenido co%pleto de la salida del co%ando y lo !e%os %ostrado en un %s*bo/2 Ta%bi5n, en lu*ar de readall pode%os utili1ar read&/(, donde / es el n9%ero de caracteres .ue .uere%os leer2 En un e$e%plo un poco %as 4elaborado4, !are%os lo %is%o .ue antes, pero esta ve1 !aciendo uso de read, leeyendo el te/to co%pleto, pero car+cter a car+cter2 Cdi*o
Set objshell = createobject("%script.shell") Set ping = objshell.exec("cm" @c ping %%%.google.com") "o if not ping.st"o#t.aten"ofstream then resp#esta = res#lta"o A ping.st"o#t.rea"(,) else exit "o en" if

loop msgbox resp#esta

Este e$e%plo, es un poco %+s dificil de e/plicar, as0 co%o ta%bi5n lo es entender, por lo .ue .uien .uiera entenderlo deber+ prestar atencin y visuali1arlo detenida%ente2 En resu%en, e$ecuta%os el pin* a *oo*le, y lue*o nos %ete%os en un bucle infinito &do(, dentro de este, un an+lisis condicional, si no se alcan1a el final de la salida &stdout2atendofstrea%(, la variable respuesta, es i*ual a la propia variable y un car+cter &concatena%os(2 Ese analisis se continuar+ !aciendo !asta .ue se alcance el final de la lectura, es a!0 donde entonces, pasa%os al else, y el else dice .ue, se sale del bucle do &e/it do(2 3or lo .ue en definitiva, el if se e$ecutar+ una y otra ve1, e ira *uardando en la variable &respuesta( letra por letra !asta for%ar el %ensa$e co%pleto, cuando se lle*ue al final, se saldr+ del bucle, y se %ostrara el %s*bo/ con la 4respuesta42 Sn poco %+s co%plicado, pero espero se entienda la idea de este e$e%plo2 !btener el 0oco de una ventana Variable.appactivate tituloventana E$e%plo2 Cdi*o
Set objshell = createobject("%script.shell") Objshell.appactivate "Sin tit#lo"

Con esto, obtendr0a%os el foco de una ventana con por e$e%plo, el t0tulo 4'in t0tulo Y -loc de notas4, .ue co%o se !abr+n dado cuenta, es el t0tulo .ue tiene un nuevo bloc de notas2 =as consideraciones .ue debe%os de tener en cuenta al utili1ar esta funcin, son las referentes al orden en el .ue reali1a las co%paraciones en busca de nuestra ventana< 8 3ri%ero busca la ventana .ue tiene el t0tulo e/acto .ue !e%os establecido 8 'i no encuentra el t0tulo e/acto, busca a.uella ventana .ue coincida en el principio del t0tulo 8 'i no encuentra ni el t0tulo e/acto, ni ta%poco encuentra t0tulo .ue co%ience co%o el nuestro, entonces busca a.uel .ue ter%ina co%o el .ue .uere%os2 8 Ta%bi5n, en el caso de !aber varias ventanas con el %is%o no%bre, ele*ira una cual.uiera al a1ar, y le dar+ el foco2 $nviar pulsaciones del teclado Otra de las funciones lla%ativas de este ob$eto, es la funcin sendkeys .ue nos per%itir+ enviar pulsaciones de teclado, co%o si estuviese%os escribiendo, as0 .ue !ay .ue tener cuidado con el uso .ue se da, ya .ue una ve1 e$ecutada, enviar+ las pulsaciones a la ventana activa, por lo .ue si no es lo .ue deseaba%os, pode%os ter%inar presionando un %ontn de teclas en un pro*ra%a /, con los resultados .ue ello puede acarrear2 Variable.send<e/s teclas E$e%ploA Cdi*o
Set objshell = createobject("%script.shell") Objshell.sen"(eys "&stas son las teclas"

Este es un e$e%plo %uy si%ple ,.ue ade%+s no reco%iendo probar, ya .ue co%o !e dic!o antes, enviar+ las pulsaciones de las teclas a la ventana activa, y los resultados pueden no 4*ustarnos42 Es por eso .ue a continuacin %uestro un e$e%plo %+s claro de esta funcin, !aciendo uso ade%+s, de funciones .ue !e%os visto anterior%ente2 Cdi*o
Set objshell = createobject("%script.shell") Set bloc = objshell.exec("notepa"") $ejec#tamos el bloc "e notas 4script.sleep )333 $espera "e "os seg#n"os Objshell.appactivate bloc.processi" $ponemos el foco en la ventana "el bloc 4script.sleep )33 $espera "e milesimas Objshell.sen"(eys ";#torial vbs" $enviamos #n mensaje con sen"(eys Objshell.sen"(eys "B&2;&<C" $l#ego "el mensaje anterior #n &2;&< 4script.sleep )333 $n#eva espera "e "os seg#n"os Objshell.sen"(eys "5roban"o la f#ncion sen"(eys" $enviamos #na seg#n"a linea "e mensaje

Co%o !ab0a dic!o, en este e$e%plo !e !ec!o uso de al*unas otras fuciones vistas anterior%ente2 3ara e%pe1ar !e optado por e$ecutar el bloc de notas a traves de la funcin e/ec, podr0a optarse por run, pero este e$e%plo %e serv0a para %ostrarles el uso .ue puede !acerse del processid2 Co%o ve%os, a la !ora de obtener el foco de la ventana con appactivate, !e puesto co%o 4t0tulo4 el processid, ya .ue vbs nos per%ite !acer uso con$unto de estas dos funciones, para de este %odo ase*urarnos de .ue el foco se pon*a en la ventana .ue corresonde y no en otra con si%ilar no%bre2 @l i*ual .ue antes, podr0a%os poner si%ple%ente el no%bre de la ventana del bloc de notas en lu*ar de processid, pero i*ual%ente creo no .uedar+n dudas de por .ue el uso de esta2 =ue*o, con respecto al env0o de las teclas, no creo .ue %ere1ca e/plicacin al*una, ya .ue es si%ple%ente el %ensa$e?pulsacin .ue .uere%os env0ar2 I*ual%ente !abr+n visto en %edio del env0o de teclas .ue ta%bi5n esta presente una tecla especial, el ZENTEC[, es por eso .ue de$o a continuacin, la tabla con el listado de ar*u%entos para estas teclasA Tecla :AC-S1AC2 :%2ACA1S LOC$2L or $2L2?2 $O9N A%%O9 2N$ 2N?2% 2SC >2L1 >O,2 0NS or 0NS2%? L2'? A%%O9 N", LOC1A62 $O9N 1A62 "1 Argumento @:AC-S1AC2A/ @:SA/ or @:-S1A @:%2A-A @CA1SLOC-A @$2L2?2A or @$2LA @$O9NA @2N$A @2N?2%A or B @2SCA @>2L1A @>O,2A @0NS2%?A or @0NSA @L2'?A @N",LOC-A @16$NA @16"1A

1%0N? SC%22N %06>? A%%O9 SC%OLL LOC?A: "1 A%%O9 '1 '2 '(

@1%?SCA @%06>?A @SC%OLLLOC-A @?A:A @"1A @'1A @'2A @'(A

3ara el caso de las teclas 'TIFT, CTC= y @=T, los ar*u%entos con B, F y \ respectiva%ente, no siendo posible utili1ar, la tecla 3CT'C, o lo .ue es i*ual, la tecla de 3CINT &la .ue se utili1a para capturar pantalla(2 3ara utili1ar estas tres letras< Ob$s!ell2sendkeys 4B@4 Ob$s!ell2sendkeys 4F:4 Ob$s!ell2sendkeys 4\ZT@-[4 ,arpetas (especiales( Con carpetas especiales %e refiero a a.uellas carpetas co%o 4Inicio4, 4Enviar a4 y 4Favoritos4 entre otras2 3ara eso, !are%os uso de la funcin specialfolders Variable.special0olders&carpeta' E$e%ploA Cdi*o
Set objshell = createobject("%script.shell") -sgbox objshell.specialfol"ers("!es(top")

Con lo .ue obtendr0a%os un %s*bo/, con la ruta del escritorio, al*o co%o 4CAE"ocu%ents and 'ettin*sENovluckerEEscritorio4, de i*ual %odo y co%o !e %encionado antes, pode%os acceder a las rutas de otras carpetas, para lo .ue, conta%os con la si*uiente tabla2 Carpeta 2scritorio ,enC 0nicio 1ro*ramas 0nicio 2scritorio 'avoritos 'uentes ,is documentos 2ntorno de red 0mpresoras 1ro*ramas %eciente 2nviar a ,enC 0nicio 0nicio 1lantillas Identificador All"sers$es top All"sersStart,enu All"sers1ro*rams All"sersStartup $es top 'avorites 'onts ,.$ocuments Net>ood 1rint>ood 1ro*rams %ecent Send?o Start,enu Startup ?emplates

Con esta tabla, solo bastar0a ca%biar 4desktop4 en nuestro e$e%plo, para ver las rutas de otras de las

carpetas disponibles, y ntese ta%bi5n .ue si bien, al*unas carpetas parecen estar repetidas, al*unos identificadores !acen referencia a las carpetas de todos los usuarios, y otras a la del usuario activo2 !btener variables de sistema -ueno, !abr+n visto entonces, .ue a pesar de la cantidad de carpetas de las .ue se puede obtener la ruta, !ay al*unas %uy interesantes .ue no aparecen con el specialfolders, co%o ser 4@rc!ivos de pro*ra%a4, la carpeta de usuario, etc2 , es por eso .ue entonces, !are%os uso de la funcin e/pandenviron%entstrin*s2 Este funcin, y co%o se !a adelantado en el t0tulo, per%ite acceder a todas las variables del siste%a, co%o ser, S'ECN@#E, S'EC3COFI=E, CO#3STECN@#E, y todas a.uellas .ue aparecen a trav5s del co%ando 'ET de %s-dos2 Variable.e"pandenvironmentstrin#s&=variablesistema=' E$e%ploA Cdi*o
Set objshell = createobject("%script.shell") -sgbox objshell.expan"environmentstrings("D5rogramfilesD")

Co%o es de esperarse, en este caso, nos aparecer+ un %ensa$e con la ruta de la carpeta de 4@rc!ivos de pro*ra%a42 ,rear accesos directos -ueno, lue*o de !aber visto ya, varias funciones, solo .ueda por ver, la de creates!ortcut, la cual per%ite crear accesos directos a cual.uier aplicacin?arc!ivo, .ui1+s pare1ca una funcin un poco 4insulsa4, pero .ui1+s al*uien .uiera por e$e%plo, a*re*ar un acceso directo en la carpeta de Inicio, y ser+ a.u0 cuando recurra%os a esta funcin2 En esta funcin es necesario definir varios valores, as0 .ue en lu*ar de e/plicarla, pasar5 directa%ente a un e$e%ploA Cdi*o
Set objshell = createobject("%script.shell") Set ellin( = objshell.createshortc#t("C:\*cceso "irecto.ln(") $creamos el lin( &llin(.targetpath = "C:\%in"o%s\notepa".exe" $completamos los valores &llin(.%in"o%style = , &llin(.hot(ey = "C;<EFS7G1;F2" &llin(.iconlocation = "C:\%in"o%s\notepa".exe 3" &llin(."escription = "*cceso "irecto a notepa"" &llin(.%or(ing"irectory ="C:\" &llin(.save $g#ar"amos el lin(

Creo .ue este e$e%plo alcan1a para entender sin proble%as esta funcin, no !ace%os %+s .ue crear el link, co%pleta%os todos los datos .ue lleva el link, y salva%os2 =os ca%pos a co%pletar son los .ue aparecen en cual.uier link &i%a*en ad$unta(, teniendo en cuenta de%+s .ue no todos son indispensables2

Falta a*re*ar, .ue pueden crearse links a p+*inas )eb]s del si*uiente %odo2 E$e%ploA Cdi*o
Set objshell = createobject("%script.shell") Set %eb#rl = objshell.createshortc#t("C:\google.#rl") 4eb#rl.targetpath = http:@@%%%.google.com 4eb#rl.save

'i%ple%ente !e%os ca%biado la e/tensin del link a url, en lu*ar de lnk co%o ten0a antes, y la ruta del link pasa a ser la direccin de la )eb a la .ue .uere%os acceder2

-ueno, as0 ter%ina la se*unda parte de este tutorial, en donde !e intentado %ostrar a .uienes no tienen conoci%ientos, los dos principales ob$etos de la 4librer0a4 de vbs, espero se !aya entendido , y co%o !e dado a entender en %i pri%er %ensa$e, la idea es ir a*re*ando nuevo ob$etos, se*ura%ente no a*re*ar5 %+s post, pero si a*re*ar5 y col*ar5 en el 4te%ario4 enlaces para descar*a de pdf

'aludos ,ontinuar>....

También podría gustarte