[DllImport("Shlwapi.dll", SetLastError=true, CharSet = CharSet.Auto)]
static extern uint AssocQueryString(AssocF flags, AssocStr str, string pszAssoc, string pszExtra,
[Out] StringBuilder pszOut, [In][Out] ref uint pcchOut);
<DllImport("Shlwapi.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Function AssocQueryString(ByVal flags As UInteger, ByVal str As UInteger, ByVal pszAssoc As String, _
ByVal pszExtra As String, ByVal pszOut As Text.StringBuilder, ByRef pcchOut As UInteger) As UInteger
End Function
[Flags]
enum AssocF
{
Init_NoRemapCLSID = 0x1,
Init_ByExeName = 0x2,
Open_ByExeName = 0x2,
Init_DefaultToStar = 0x4,
Init_DefaultToFolder = 0x8,
NoUserSettings = 0x10,
NoTruncate = 0x20,
Verify = 0x40,
RemapRunDll = 0x80,
NoFixUps = 0x100,
IgnoreBaseClass = 0x200
}
enum AssocStr
{
Command = 1,
Executable,
FriendlyDocName,
FriendlyAppName,
NoOpen,
ShellNewValue,
DDECommand,
DDEIfExec,
DDEApplication,
DDETopic,
INFOTIP,
QUICKTIP,
TILEINFO,
CONTENTTYPE,
DEFAULTICON,
SHELLEXTENSION,
DROPTARGET,
DELEGATEEXECUTE,
SUPPORTED_URI_PROTOCOLS,
MAX
}
Do you know one? Please contribute it!
None.
Please add some!
public string GetAssociation(string doctype)
{
uint pcchOut = 0; // size of output buffer
// First call is to get the required size of output buffer
AssocQueryString(AssocF.Verify, AssocStr.Executable, doctype, null, null, ref pcchOut);
if (pcchOut == 0)
{
return String.Empty;
}
// Allocate the output buffer
StringBuilder pszOut = new StringBuilder((int)pcchOut);
// Get the full pathname to the program in pszOut
AssocQueryString(AssocF.Verify, AssocStr.Executable, doctype, null, pszOut, ref pcchOut);
string doc = pszOut.ToString();
return doc;
}