[DllImport("shell32.dll")]
static extern IntPtr FindExecutable(string lpFile, string lpDirectory, [Out] StringBuilder lpResult);
<DllImport("shell32.dll")> _
Private Shared Function FindExecutable(ByVal lpFile As String, ByVal lpDirectory As String, ByRef lpResult As StringBuilder) As IntPtr
End Function
Private Declare Function FindExecute Lib "shell32.dll" Alias _
"FindExecutableA" (ByVal lpFile As String, ByVal lpDirectory _
As String, ByVal lpResult As String) As Long
None.
1) When using VB, one cannot place the declaration for FindExecutable within
the code portion of a form. If one needs to search for an executable from
within a form, though, it is easy enough to open a module and place the
declaration there. From the form code, make a call to a function in the
module. Within the module function, execute FindExecutable and return any
results to the form routine. steveapub@pineclifftech.com
2) Make sure the following references are available:
Imports System.Runtime.InteropServices
Imports System.Text
Error Codes that can be returned:
Public Enum FindExecutableErrorCodes
''' <summary>The specified file was not found.</summary>
SE_ERR_FNF = 2
''' <summary>There is no application associated with the given file name extension. This error will also be returned if you attempt to print a file that is not printable. </summary>
SE_ERR_NOASSOC = 31
''' <summary>There was not enough memory to complete the operation.</summary>
SE_ERR_OOM = 8
End Enum
Please add some!!
Do you know one? Please contribute it!
********** Win32API.cs **********
using System;
using System.Text;
using System.Runtime.InteropServices;
namespace QuickTool
{
public class Win32API
{
[DllImport("shell32.dll", EntryPoint="FindExecutable")]
public static extern long FindExecutableA(
string lpFile, string lpDirectory, StringBuilder lpResult);
public static string FindExecutable(
string pv_strFilename)
{
StringBuilder objResultBuffer =
new StringBuilder(1024);
long lngResult = 0;
lngResult =
FindExecutableA(pv_strFilename,
string.Empty, objResultBuffer);
if(lngResult >= 32)
{
return objResultBuffer.ToString();
}
return string.Format(
"Error: ({0})", lngResult);
}
}
}
********************************
******** Form1.cs ********
private void mnuDynamic_Click(object sender, System.EventArgs e)
{
MenuItem theMenuItem = (MenuItem) sender;
MessageBox.Show(Win32API.FindExecutable(theMenuItem.Text));
}
**********************************