|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Visual Basic
Internet Routines FindExecutable: Obtain Exe of the Default Browser |
||
Posted: | Wednesday October 13, 1999 | |
Updated: | Monday December 26, 2011 | |
Applies to: | VB4-32, VB5, VB6 | |
Developed with: | VB6, Windows NT4 | |
OS restrictions: | None | |
Author: | VBnet - Randy Birch | |
Related: |
CreateProcess: Start Separate Instances of the Default Browser FindExecutable: Find Exe Associated with a Registered Extension RegSetValueEx: Create a Registered File Association |
|
Prerequisites | ||||||||||
None. | ||||||||||
|
||||||||||
The routine here will return the full drive, path and
filename of the user's default application associated with html files. Typically, this will always be the user's default browser.
The routine works by first determining the system temp folder, creating a dummy filename there with the extension .html, then passing that information to FindExecutable. The API returns the path and application associated with the passed file .html extension, and the temporary file is deleted. Also passed to the function is a flags parameter which is filled with the return code of the API call. The return value can be handled as needed by the app. The path/application is returned as a short or long filename as exactly as stored in the registry. Note however that this code can not guarantee the associated application returned is a browser, only that *some* application is associated with the specified extension. While in most cases this will be the default browser, it is possible that another browser or application has hijacked the html extension. One reported case indicated MS Word was associated with the html file extension. Therefore it may be justified to check the returned string from this call for "iexplore.exe" or the name of the browser of your choice, and if not the expected value to prompt the user to select their default browser, which you'd then save as your own setting for future reference. Another alternative would be to present the user with the list of installed browsers contained under the registry key: HKEY_LOCAL_MACHINE\SOFTWARE\Clients\StartMenuInternet ... or to retrieve the application related to the http:// command listed under: HKEY_LOCAL_MACHINE\SOFTWARE\Classes\http\shell\open\command |
||||||||||
BAS Module Code | ||||||||||
None. | ||||||||||
|
||||||||||
Form Code | ||||||||||
Drop a command button onto a form and add the following: | ||||||||||
|
||||||||||
Option Explicit '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Copyright ©1996-2011 VBnet/Randy Birch, All Rights Reserved. ' Some pages may also contain other copyrights by the author. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Distribution: You can freely use this code in your own ' applications, but you may not reproduce ' or publish this code on any web site, ' online service, or distribute as source ' on any media without express permission. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Declare Function FindExecutable Lib "shell32" _ Alias "FindExecutableA" _ (ByVal lpFile As String, _ ByVal lpDirectory As String, _ ByVal sResult As String) As Long Private Declare Function GetTempPath Lib "kernel32" _ Alias "GetTempPathA" _ (ByVal nSize As Long, _ ByVal lpBuffer As String) As Long Private Const MAX_PATH As Long = 260 Private Const ERROR_FILE_NO_ASSOCIATION As Long = 31 Private Const ERROR_FILE_NOT_FOUND As Long = 2 Private Const ERROR_PATH_NOT_FOUND As Long = 3 Private Const ERROR_FILE_SUCCESS As Long = 32 'my constant Private Const ERROR_BAD_FORMAT As Long = 11 Private Sub Command1_Click() Dim success As Long Dim sBrowser As String 'success is passed and filled in the routine sBrowser = GetBrowserName(success) 'possible return values from the call 'returned in success Select Case success 'the call succeeded Case Is >= ERROR_FILE_SUCCESS MsgBox sBrowser Exit Sub 'other possible return values Case ERROR_FILE_NO_ASSOCIATION Case ERROR_FILE_NOT_FOUND Case ERROR_PATH_NOT_FOUND Case ERROR_BAD_FORMAT Case Else End Select 'if this far the call failed MsgBox "No dice!" End Sub Private Function GetBrowserName(dwFlagReturned As Long) As String Dim hFile As Long Dim sResult As String Dim sTempFolder As String 'get the user's temp folder sTempFolder = GetTempDir() 'create a dummy html file in the temp dir hFile = FreeFile Open sTempFolder & "dummy.html" For Output As #hFile Close #hFile 'get the file path & name associated with the file sResult = Space$(MAX_PATH) dwFlagReturned = FindExecutable("dummy.html", sTempFolder, sResult) 'clean up Kill sTempFolder & "dummy.html" 'return result GetBrowserName = TrimNull(sResult) End Function Private Function TrimNull(item As String) Dim pos As Integer pos = InStr(item, Chr$(0)) If pos Then TrimNull = Left$(item, pos - 1) Else TrimNull = item End If End Function Public Function GetTempDir() As String Dim nSize As Long Dim tmp As String tmp = Space$(MAX_PATH) nSize = Len(tmp) Call GetTempPath(nSize, tmp) GetTempDir = TrimNull(tmp) End Function |
||||||||||
Comments | ||||||||||
This method returns the path and filename of the
associated executable stored in the registry. For example, the above call (on my system) returns E:\PROGRA~1\INTERN~1\iexplore.exe, as
opposed to the long path name.
FindExecutable returns a value greater than 32 if successful, or a value less than or equal to 32 otherwise. The following table lists the possible error values:
In addition, the MSDN Remarks section for FindExecutable states that when FindExecutable returns, the lpResult parameter may contain the path to the DDE (Dynamic Data Exchange) server started if a server does not respond to a request to initiate a DDE conversation with the DDE client application. |
||||||||||
|
|
|
|||||
|
|||||
|
|||||
Copyright ©1996-2011 VBnet and Randy Birch. All Rights Reserved. |