|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Visual Basic System Services FindExecutable: Find Exe Associated with a Registered Extension |
||
Posted: | Sunday September 12, 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: |
ShellExecute: Simulate a Hyperlink with a Label Control FindExecutable: Find Exe Associated with a Registered Extension ShellExecute: ShellExecute Madness CreateProcess: Start Separate Instances of the Default Browser ShellExecute: Send Large Emails in Outlook Express |
|
Prerequisites | ||||||||||
None. | ||||||||||
|
||||||||||
While the ShellExecute and ShellExecuteEx APIs provide
direct means to launch an application by passing an associated file, on occasion developers may need to know exactly which
application/executable a particular file association is tied to. Calling the FindExecutable API, and passing a valid file name and path,
returns the path and application associated with the passed file extension.
The path/application is returned as a short or long filename exactly as stored in the registry. |
||||||||||
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 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 pos As Long Dim sResult As String Dim msg As String sResult = Space$(MAX_PATH) 'lpFile: name of the file of interest 'lpDirectory: location of lpFile 'sResult: path and name of executable associated with lpFile success = FindExecutable("winhlp32.hlp", "c:\winnt\system32\", sResult) Select Case success Case ERROR_FILE_NO_ASSOCIATION: msg = "no association" Case ERROR_FILE_NOT_FOUND: msg = "file not found" Case ERROR_PATH_NOT_FOUND: msg = "path not found" Case ERROR_BAD_FORMAT: msg = "bad format" Case Is >= ERROR_FILE_SUCCESS: pos = InStr(sResult, Chr$(0)) If pos Then msg = Left$(sResult, pos - 1) End If End Select MsgBox msg End Sub |
||||||||||
Comments | ||||||||||
This method returns the path and filename of the
associated executable. It does not return the "friendly" name. For example, the above call (on my system) returns c:\winnt\system32\winhlp32.exe,
not "Windows NT Help". Passing a html file returns e:\progra~1\intern~1\iexplore.exe, not "Microsoft Internet Explorer".
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. |