vbs español ejecutar codigos vbscript hta

vbscript - español - ejecutar vbs



Selección de archivo o carpeta VBScript (4)

Tengo un pequeño archivo hta con algunos códigos vbs. Selecciona carpeta o archivo y luego realiza una copia en una ubicación fija.

<html> <head> <Title>File Copy </Title> <style> img.exco { position:absolute; bottom:10px; right:10px } </style> <!--Put this sub here to avoid resize flickering.--> <script language = "VBScript"> sub DoResize ''resize window.resizeTo 690,350 screenWidth = Document.ParentWindow.Screen.AvailWidth screenHeight = Document.ParentWindow.Screen.AvailHeight posLeft = (screenWidth - 700) / 2 posTop = (screenHeight - 430) / 2 ''move to centerscreen window.moveTo posLeft, posTop end sub DoResize() </script> <HTA:APPLICATION ID="" applicationName="" version="1.1" BORDER="thin" BORDERSTYLE="static" CAPTION="Yes" CONTEXTMENU="no" ICON="C:/icon/32x32.ico" INNERBORDER="no" MAXIMIZEBUTTON="no" MINIMIZEBUTTON="no" NAVIGATABLE="no" SCROLL="no" SCROLLFLAT="no" SELECTION="no" SHOWINTASKBAR="yes" SINGLEINSTANCE="yes" SYSMENU="yes" WINDOWSTATE="normal" > <script language = "VBScript"> Sub BrowseSource_OnClick() strStartDir = "K:/Data/" Copy_To_PC.txtFile.value = PickFolder(strStartDir) End Sub Function PickFolder(strStartDir) Dim shell : Set shell = CreateObject("Shell.Application") Dim file : Set file = shell.BrowseForFolder(0, "Choose a file:", &H4000) If (Not File Is Nothing) Then PickFolder = file.self.Path End If Set shell = Nothing Set file = Nothing End Function Sub RunScripts_OnClick() Copy Paste OpenWord End Sub Sub Copy End Sub Sub Paste msgBox "Copy Success!" End Sub Sub OpenWord End Sub </script> </head> <body> <p><b><font size="4">Please select the file.</font></b></p> <form name="Copy_To_PC"> <input type = "text" name = "txtFile" size="100" /> <input type = "button" value = "File Source" Name="BrowseSource"> <input type="button" value="Copy and Paste" name="RunScripts"> </form> </body> </html>

Tengo problemas para seleccionar elementos (carpeta o archivo) cuando hago clic en el primer botón.

  1. Capta bien la carpeta, pero cuando selecciono archivos, recibí un "error no especificado en la línea 60", por favor ayúdenme a solucionarlo. Quiero que la ventana del navegador de archivos sea como está ahora con el botón Aceptar, no con el botón "abrir", así puedo seleccionar tanto la carpeta como el archivo.

  2. Además, el explorador de archivos no se inicia desde la ubicación que configuré. ¿Como arreglarlo?


¿Cómo seleccionar carpeta o archivo en la misma ventana? Por MSDN , el método Shell.BrowseForFolder crea un cuadro de diálogo que permite al usuario seleccionar una carpeta y luego devuelve el objeto Folder la carpeta seleccionada.

Por lo tanto, para buscar un archivo , necesitamos usar otro método. Existe el atributo nativo <input ...> tag with type="file" . Sin embargo, su uso trae más inconvenientes que ventajas (ver segunda solución a continuación).

En la siguiente solución, Browse for File se logra utilizando el objeto HtmlDlgHelper , un objeto oscuro y poco documentado que, sin embargo, está disponible en todos los sistemas de Windows ... En comparación con la etiqueta <input ...> mencionada anteriormente, esta solución ofrece a definir tanto la ubicación inicial como el enmascaramiento del tipo de archivo.

<HTML> <HEAD> <Title>File/Folder Copy B</Title> <!-- Browse for - file: based on the HTMLDlgHelper class registered via C:/Windows/System32/mshtmled.dll (.OpenFileDlg returns string) - folder: based on the Shell.BrowseForFolder method (returns the selected folder''s Folder object) --> <HTA:APPLICATION ID="" APPLICATIONNAME="28632270ym" SCROLL="no" SINGLEINSTANCE="yes" WINDOWSTATE="normal" > <script language="VBScript"> '''''''''''''''''''''''''''''''''''''''''''''''''''' '''''' Global State Variables '''''''''''''''''''''''''''''''''''''''''''''''''''' Dim sStartPath, sStartFile, sFilter, sCaption sStartPath = "D:/Remote" sStartFile = sStartPath & "/nul" sFilter = "All Files (*.*)|*.*|" _ & "VBScript (*.vbs;*.vbc)|*.vbs;*.vbc|" _ & "HTML (*.htm;*.html;*.hta)|*.htm;*.html;*.hta|" sCaption = "Choose a File:" Sub Window_Onload self.Focus() self.moveTo 1, 1 self.ResizeTo 760,400 End Sub Sub BrForFolder sBFF = PickFolder(sStartPath) If not sBFF = "" Then document.Copy_To_PC.txtfile.value = sBFF document.Copy_To_PC.OKbuton.value = "Treat folder" End If End Sub Sub BrForFile_onclick sBFF = Dlg.OpenFileDlg( CStr(sStartFile), , CStr(sFilter), CStr(sCaption)) If not sBFF = "" Then document.Copy_To_PC.txtfile.value = sBFF document.Copy_To_PC.OKbuton.value = "Treat file" End If End Sub Function PickFolder(sStartPath) Dim shell, oFldr Set shell = CreateObject("Shell.Application") Set oFldr = shell.BrowseForFolder(0, "Choose a folder:" _ , &H0001 + &H0004 + &H0010 + &H0020, sStartPath) ''See MSDN "BROWSEINFO structure" for constants If (Not oFldr Is Nothing) Then PickFolder = oFldr.Self.Path Else PickFolder = "" End If Set shell = Nothing Set oFldr = Nothing End Function Sub DoFileOK() MsgBox document.Copy_To_PC.OKbuton.value _ & " """ & document.Copy_To_PC.txtfile.value & """" document.Copy_To_PC.txtfile.value = "" document.Copy_To_PC.OKbuton.value = "Undefined" End Sub </script> </HEAD><BODY> <OBJECT id=Dlg classid="CLSID:3050F4E1-98B5-11CF-BB82-00AA00BDCE0B" width=0 height=0> </OBJECT> <FORM name="Copy_To_PC"> <p><b><font size="3">Please select a file or folder.</font></b></p> <input style="width:600px;" type="text" id="txtfile" name="txtfile" /> <br> <input type="button" value="Browse for File..." id="BrForFile"> &nbsp;&nbsp;or&nbsp;&nbsp; <input type="button" value="Browse for Folder..." onClick=BrForFolder()> <br> <br>Action&nbsp; <input type="button" value="Undefined" id="OKbuton" onClick=DoFileOK()> <br> <br>Quit:&nbsp; <input type="button" value="All done" onClick=self.window.close()> </FORM></BODY></HTML>

Segunda solución:

<html> <head> <Title>File/Folder Copy A</Title> <!-- based on <input type="file"> of zero width --> <HTA:APPLICATION ID="" APPLICATIONNAME="28632270my" SCROLL="no" SINGLEINSTANCE="yes" WINDOWSTATE="normal" > <script language = "VBScript"> '''''''''''''''''''''''''''''''''''''''''''''''''''' '''''' Global State Variables '''''''''''''''''''''''''''''''''''''''''''''''''''' sStartPath = "D:/Remote" sFilter = "application/pdf,text/plain" Sub Window_Onload self.Focus() self.moveTo 1, 1 self.ResizeTo 960,400 End Sub Sub BrForFolder() sBFF = PickFolder(sStartPath) If sBFF = "" Then ''do not overwrite .txtfile.value with an empty string Else Copy_To_PC.txtfile.value = sBFF Copy_To_PC.OKbuton.value = "Treat folder" End If ''NOT possible (security reason): Copy_To_PC.fn_file.value = "" End Sub Sub BrForFile() ''??? how to know whether a user has pressed ''Open'' or ''Cancel'' ??? ''http://.com/a/4628563/3439404 ''The result of the file dialog is not exposed to the browser. '' ''??? how to set initial working directory??? '' and file types??? (MSIE does not care about the accept attribute?) sBFF = Copy_To_PC.fn_file.value If sBFF = "" Then ''do not overwrite .txtfile.value with an empty string Else Copy_To_PC.txtfile.value = sBFF Copy_To_PC.OKbuton.value = "Treat file" End If End Sub Function PickFolder(sStartPath) Dim shell : Set shell = CreateObject("Shell.Application") Dim oFldr : Set oFldr = shell.BrowseForFolder(0, "Choose a folder:" _ , &H0001 + &H0004 + &H0010 + &H0020, sStartPath) ''See MSDN "BROWSEINFO structure" for constants ''Shell.BrowseForFolder method: Creates a dialog box that '' enables the user to select a folder and then returns '' the selected folder''s Folder object. If (Not oFldr Is Nothing) Then PickFolder = oFldr.Self.Path Else PickFolder = "" End If Set shell = Nothing Set oFldr = Nothing End Function Sub DoFileOK() MsgBox Copy_To_PC.OKbuton.value _ & " """ & Copy_To_PC.txtfile.value & """" Copy_To_PC.txtfile.value = "" Copy_To_PC.OKbuton.value = "Undefined" End Sub </script> </head><body><form name="Copy_To_PC"> <p><b><font size="3">Please select a file or folder.</font></b></p> <input style="width:600px;" type="text" id="txtfile" name="txtfile" /> <input style="width:0px;" type="file" id="fn_file" name="fn_file" accept=sFilter onChange=BrForFile() onBlur=BrForFile()> &nbsp;or&nbsp; <input type="button" value="...for Folder..." onClick=BrForFolder()> <br> <br>Action&nbsp; <input type="button" value="Undefined" id="OKbuton" onClick=DoFileOK()> <br> <br>Quit:&nbsp; <input type="button" value="All done" onClick=self.window.close()> </form></body></html>


Aquí hay un ejemplo de cómo configurar el directorio de inicio y la selección de archivos.

Const GeneratedItemFlag = &h4000 dim shellApp dim folderBrowseDialog dim filePath set shellApp = CreateObject("Shell.Application") set folderBrowseDialog = shellApp.BrowseForFolder(0,"Select the file", GeneratedItemFlag, "c:/") if folderBrowseDialog is nothing then msgbox "No file was selected. This will now terminate." Wscript.Quit else filePath= folderBrowseDialog.self.path end if


De hecho, hay un error en la parte HTA del primer ejemplo de código que causará algunos problemas en el camino. La etiqueta dice NAVIGATABLE = "no". Debería ser NAVIGABLE = "no". Debes perder el AT.


<!-- :: Batch section @echo off setlocal echo Select an option: for /F "delims=" %%a in (''mshta.exe "%~F0"'') do set "HTAreply=%%a" tasklist /fi "imagename eq iexplore.exe" |find ":" > nul if errorlevel 1 taskkill /f /im "iexplore.exe" echo End of HTA window, reply: "%HTAreply%" Echo hi... echo %HTAreply% call installation.cmd --> <HTML> <HEAD> <HTA:APPLICATION SCROLL="no" SYSMENU="no" > <TITLE>Your Project Folder </TITLE> <SCRIPT language="JavaScript"> window.resizeTo(440,170); function validateForm() { var x=document.forms["myForm"]["pname"].value; if(x==""){ return false; } var fso = new ActiveXObject("Scripting.FileSystemObject"); fso.GetStandardStream(1).WriteLine(x); window.close(); } function selectPath() { var objShell = new ActiveXObject("shell.application"); var objFolder; objFolder = objShell.BrowseForFolder(0, "Example", 0, 0); if(objFolder){ document.forms["myForm"]["pname"].value = objFolder.Self.Path; } } </SCRIPT> </HEAD> <BODY> <form name="myForm" onsubmit="return validateForm()"> pathtostore: <input type="text" name="pname" value="c:/program files"> <input type="button" onclick="selectPath()" value="Browse"> <br> <br> <input type="submit" value="ok"> </form> </BODY> </HTML>