2017-10-05 80 views
0

下面的代碼會給我一個擴展名的appName。從AssocQueryString獲取AppName c#

[DllImport("Shlwapi.dll", SetLastError = true)] 
     static extern uint AssocQueryString(AssocF flags, AssocStr str, string pszAssoc, string pszExtra, 

[Out] StringBuilder pszOut, [In][Out] ref uint pcchOut); 



     public string Get(string doctype) 

     { 

     uint pcchOut = 0; 

     AssocQueryString(AssocF.Verify, AssocStr.FriendlyAppName, doctype, null, null, ref pcchOut); 

     StringBuilder pszOut = new StringBuilder((int)pcchOut); 

     AssocQueryString(AssocF.Verify, AssocStr.FriendlyAppName, doctype, null, pszOut, ref pcchOut); 

     string doc = pszOut.ToString(); 

     return doc; 

     } 

我該如何改變這個給我的AppName傳遞給exe路徑?

回答

1

說明文檔中提到這是可能的,如果你設置ASSOCF_OPEN_BYEXENAME傳遞國旗的可執行文件名,所以你會想從路徑中的可執行文件的名稱,然後將它連同此標誌傳遞:

public string Get(string path) 
    { 
     string fileName = Path.GetFileName(path); 
     uint pcchOut = 0; 

     AssocQueryString(AssocF.OpenByExeName, AssocStr.FriendlyAppName, fileName, null, null, ref pcchOut); 

     StringBuilder pszOut = new StringBuilder((int)pcchOut); 

     AssocQueryString(AssocF.OpenByExeName, AssocStr.FriendlyAppName, fileName, null, pszOut, ref pcchOut); 

     string doc = pszOut.ToString(); 

     return doc; 
    } 

鏈接到本文件: https://msdn.microsoft.com/en-us/library/windows/desktop/bb773471(v=vs.85).aspx