I'm trying to build a local HTA (HTML Application) that will send me to a website I designate. I've got most of it working, as in it currently allows me to type in an address and choose whether to open that URL in either Internet Explorer or Firefox (both in normal and in private).
What I'm asking is if there is a vbscript I can add onto my HTA that will allow me to drag and drop a shortcut that is on my desktop and click a button to do the same as typing it out. Essentially, I would love for it to be similar to Google Image search. Like you can either type in or drag and drop an image to search. This is just for me to quickly open webpages that I have a shortcut saved. I know i could use the favorites option, but I often use many different computers and I have a flash drive that has all my stuff on it.
You want to drag file (url shortcut in this case) and drop it inside open .hta window? If so then looks like what you are looking for is not yet implemented in HTML Application.
Edit
If you have recent Internet Explorer version (9+) then you can play with the HTML5 native
drag and drop feature. As I'm on XP where IE8 is the most upper version, I can't help
in that challenge.
If that so difficult or not applicable then may consider plan B, where can make a function
on start up that scan your Desktop for *.URL files and populate them in Select element, so you'll end with something like:
<select id="urlList">
<option value="" selected>---</option>
<option value="http://...">Shortcut1.url</option>
<option value="http://...">Shortcut2.url</option>
</select>
<input id="urlAddress" type="text">
...and can control it with OnChange event by including a handler into your Head section:
Sub urlList_OnChange()
Document.All.urlAddress.Value = _
Me.Options(Me.selectedIndex).Value
End Sub
Here is a quick snippet to get started.
Set WshShell = CreateObject("WScript.Shell")
strDesktop = WshShell.SpecialFolders("Desktop")
Set fso = CreateObject("Scripting.FileSystemObject")
Set fld = fso.GetFolder(strDesktop)
For Each f In fld.Files
If f.Type = "Internet Shortcut" Then
MsgBox f.Path & vbNewLine & ReadURL(f.Path)
End If
Next
Function ReadURL(urlFile)
With CreateObject("Scripting.FileSystemObject")
With .OpenTextFile(urlFile, 1)
.SkipLine
ReadURL = (Split(.ReadLine, "="))(1)
End With
End With
End Function
Yes, you can, see this article from Hey, Scripting Guy (the best resource for Vbscript and Powershell stuff). Dragging something onto a shortcut is almost the same as passing parameters to a script (HTA here).
http://blogs.technet.com/b/heyscriptingguy/archive/2005/04/20/how-can-i-pass-command-line-variables-to-an-hta-when-it-starts.aspx
Related
I want to create a VBScript script to detect Internet Explorer opening page and opening new tab in the same window. For example, when I manually open Internet Explorer at www.google.com the VBScript will do:
detect and open new tab in same window with www.example.com
but do this only once
I tried with this code:
Set wshShell = CreateObject("WScript.Shell")
Do
page1 = wshShell.AppActivate("Blank page - Internet Explorer")
If page1 = True Then
Set page2 = CreateObject("InternetExplorer.Application")
page2.Navigate "http://www.example.com", CLng(navOpenInNewTab)
End If
WScript.Sleep 500
Loop
For one thing, you must use the existing Internet Explorer instance instead of creating a new one. Unfortunately the way one might expect to be able to do that (GetObject(, "InternetExplorer.Application")) does not work for Internet Explorer COM objects. AppActivate also doesn't help here, because it doesn't return a handle to the application object, which you need to invoke its methods. Instead you need to do it this way:
Set app = CreateObject("Shell.Application")
For Each wnd In app.Windows
If InStr(1, wnd.FullName, "iexplore.exe", vbTextCompare) > 0 Then
Set ie = wnd
Exit For
End If
Next
If you want to select an instance that has a particular page opened, you can for instance check the title of that page to make the selection:
wnd.Document.Title = "something"
or
InStr(1, wnd.Document.Title, "something", vbTextCompare) > 0
Your second problem is that VBScript doesn't recognize the symbolic constant navOpenInNewTab. You must either use the numeric value (as defined in the BrowserNavConstants enumeration):
ie.Navigate "http://www.example.com", CLng(2048)
or define the constant yourself first:
Const navOpenInNewTab = &h0800&
ie.Navigate "http://www.example.com", navOpenInNewTab
Note that you must use hexadecimal notation with a trailing ampersand here, because the value must be a Long and you must use literals in Const definitions. Expressions like calling the function CLng are not valid.
Alternatively you can open a URL in a new tab by omitting the second parameter of the Navigate method entirely and instead providing the value "_blank" for the third parameter:
ie.Navigate "http://www.example.com", , "_blank"
However, I'm not certain that this would always open a new tab in the current window (might depend on the browser's tab settings), so I'd recommend using the second parameter (flags) as described above.
I am need of VBScript code to paste the content from one IE Explorer WebPage window to another IE Explorer WebPage window.
Currently i know the Process ID.
However I am not able to switch from one webpage to another. Or you can say my control does not move from one page to another.
#shellbye
Function Bmc(abc,xyz)
Set objIE = CreateObject("InternetExplorer.Application")
Call objIE.Navigate("// SOME APLLICATION") ' #opened the Web applcation
'# LOGGED INTO THE APPLCATION SUCCESSFULLY suing the VBScript
For i = 0 To objIE.Document.links.Length - 1
if objIE.Document.links(i).innerText ="Create a New Case" Then
Do Until objIE.ReadyState = PAGE_LOADED : Call WScript.Sleep(100) : Loop
objIE.Document.links(i).click '## THIS OPENS A NEW Window as link is an URL
Exit For
End If
End Function
In above, I am able to Open the new window after clicking the link i.e. at Step ##
Now I want to copy the content abc and xyz passed in the function Bmc(abc,xyz) to New Window opened through this.
However I am unable to move or us can say switch control to new window.
I am trying to run a vbscript that will load up a html page in chrome and then do control+a which will select everything on the page, with the ultimate view to copy it and then paste it into excel.
this my script so far:
Set WshShell = WScript.CreateObject("WScript.Shell")
Dim iURL
Dim objShell
iURL = "C:\Users\Aasfasf\AppData\Local\Temp\TD_80\hpqc\52136023e30\****\121200.html"
set objShell = CreateObject("WScript.Shell")
objShell.run(iURL)
WScript.Sleep 1500
WshShell.SendKeys "^a"
when I run it loads up the html page, but i dont think the control+a command is working as nothing is selected.
Two suggestions:
The focus is probably not on the content in chrome. Try sending a Tab key press a couple of times first to see if that fixes it.
A better approach to this might be to just read the contents of the file, then delete all the markup from the document using regex.
Excel can just load your web page without needing any help from you.
Alt + D, D, W
Is there a way that I could automate the right-clicking of a file in a Windows 7 folder and select the, "Send To -> Amazon Cloud Drive" context menu option in a simple VB script?
The answer is yes and no. There is no direct way of doing this. You could create a workaround but it would be very involved.
The "proper" approach is to use the ShellFolderItem object's InvokeVerb method. It looks like this:
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace("C:")
Set objFile = objFolder.ParseName("test.vbs")
' Execute context menu item
'objFile.InvokeVerb("&Copy")
' List all possible verbs
Set colFolderItemVerbs = objFile.Verbs
For Each objFolderItemVerb in colFolderItemVerbs
WScript.Echo Chr(34) & objFolderItemVerb.Name & Chr(34)
Next
The problem is that submenu items are listed as empty strings.
As one possible workaround is to navigate to the Send To folder and grab the command line for the shortcut you want to use. You could then implement it directly.
How can I run code when a Worksheet opens? (The code that I want to run is contained in the opening worksheet)
You can put certain code in the Worksheet_Activate() function which will run when the sheet is selected. Additionally, use the Worksheet_Deactivate() to run code when you leave the wokrsheet and go to another one. These functions go in the worksheet object code.
Private Sub Worksheet_Activate()
MsgBox ("Hi")
End Sub
Private Sub Worksheet_Deactivate()
MsgBox ("Bye")
End Sub
I'm not sure how to get code to run when a worksheet opens, but you can get it to run when a workbook opens.
In the VBA editor, open the Microsoft Excel Object called "ThisWorkbook." At the top of the editor window, you should see two drop-down boxes: (General) and (Declarations). Change the (General) combo box to be "Workbook."
This will give you method called Workbook_Open(). Code placed in this method will execute when you open the Excel Workbook.
Furthermore, you have more events at your disposable, available in the (Declarations) section when you have Workbook selected, such as SheetActivate and SheetChanged, among others. I haven't used those methods, but they may be something to try if you need events related to individual worksheets and not just the entire workbook.
One way I have found to autorun while opening with Worksheet code only -without Workbook code - is with the Calculate event triggered by i.e. a formula =Now().
This can be relevant if copying the sheet to a new workbook should be allowed and the VBA code to run there as well.
You can also use static variables to run code only once in the Worksheet.Activate function like this...
Private Sub Worksheet_Activate()
Static Loaded as Variant
If Loaded <> True then
MsgBox ("Hi")
Loaded = True
End If
End Sub