Closing a firefox tab with Visual Basic (and JavaScript if needed)

Hi,

Is there a way of closing a tab in Firefox using Visual Basic?  Through VB I can open html files into Firefox, but I'm dealing with hundreds of files and I need to close each file when it's done -- programmatically.  

Can I do this through VB, or maybe a combo of VB and JavaScript?  I have to have control through VB, but if there needs to be a little JS that's okay.

Thanks!
Gene
LVL 11
ugebAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
NizzeKConnect With a Mentor Commented:
Hi!
If you assign a handle, e.g. like winFF01=System.Diagnostics.Process.Start(filename), you can manage individual windows. I am not sure of the syntax, but this at least works with DDEInitiate("iexplore",webpage)  or Firefox dito. Moslty I use Application.FollowHyperlink "webpage" myself.

PostMessage will soon be available (Firefox 3).
http://developer.mozilla.org/en/docs/DOM:window.postMessage
This will enable sending a closure message etc to the specific window.
This is Windows standard. see http://support.microsoft.com/kb/176391/en-us
See also SendMessage
I have attached some found VB-code as an example.
Unfortunately I haven't found the right code to close a specific tab.

If you assign different title texts in the windows, you can also scan the collection of windows and close the one that matches, using System.Diagnostics.Process.GetProcessesByName("firefox") and
if currentProcess.MainWindowTitle.Equals("titleID") then currentProcess.Kill()
See more: http://forums.msdn.microsoft.com/en-US/vblanguage/thread/9dd4a526-889d-4afe-81f9-96c44a8501ff/
 


Private Declare Function EnumWindows Lib _
   "user32" (ByVal lpEnumFunc As Long, lParam _
   As Any) As Long
Private Declare Function _
   GetWindowThreadProcessId Lib "user32" (ByVal _
   hWnd As Long, lpdwProcessId As Long) As Long
Private Declare Function GetWindowLong Lib _
   "user32" Alias "GetWindowLongA" (ByVal hWnd _
   As Long, ByVal nIndex As Long) As Long
Private Declare Function PostMessage Lib _
   "user32" Alias "PostMessageA" (ByVal hWnd As _
   Long, ByVal wMsg As Long, ByVal wParam As _
   Long, lParam As Any) As Long
Private Const GWL_HWNDPARENT = (-8)
Private Const WM_CLOSE = &H10
'
' Initiate PostCloseMessage callbacks like this:
' Call EnumWindows(AddressOf PostCloseMessage, 
' ByVal ProcessID)
'
Private Function PostCloseMessage(ByVal hWnd As _
   Long, ByVal lParam As Long) As Long
   Static PID As Long
   ' Check if hWnd belongs to PID: lParam
   Call GetWindowThreadProcessId(hWnd, PID)
   If PID = lParam Then
      ' Belongs to target process, try close 
      ' message if this doesn't have an owner. VB 
      ' apps that display a msgbox from 
      ' QueryUnload will lock a 9x box up hard, 
      ' if we don't do this test!
      If GetWindowLong(hWnd, GWL_HWNDPARENT) _
         = 0 Then
         Call PostMessage(hWnd, WM_CLOSE, _
            0&, ByVal 0&)
      End If
   End If
   ' Return true to continue enumeration.
   PostCloseMessage = True
End Function

Open in new window

0
 
ysfxCommented:
What method do you use to open the html files?
0
 
ugebAuthor Commented:
I use

System.Diagnostics.Process.Start(filename)

Does this matter?

0
 
NizzeKConnect With a Mentor Commented:
Here more that I hope can shed some light on the issue.
http://www.codeproject.com/KB/applications/JWinSearch.aspx
(Not VB, however, but can still give some clues)
It handles both Firefox and IE tabs.

Well, DDEinitiate works well with "iexplore", but firefox seems to be more difficult.
btw which version of VB are you using?
Some tips above are for VB.NET

Here is a VB6 page but this will probably kill all tabs in an instance at once.
http://support.microsoft.com/kb/168204
0
 
ugebAuthor Commented:
Still have issues, but moved on.  Thanks!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.