2013-07-09 101 views
0

我正在製作一個啓動器來打開我的電腦上的所有應用程序。但是我不知道如何讀取打開文件的參數是一個快捷方式。我曾嘗試使用:如何使用OpenFileDialog讀取所有數據快捷方式?

openFileDialog.DereferenceLinks = false; //and true 

任何人都可以幫助我嗎?我的代碼在這裏:

private void button1_Click(object sender, EventArgs e) 
{ 
    OpenFileDialog od = new OpenFileDialog(); 
    od.DereferenceLinks = false; 
    od.Multiselect = false; 
    od.SupportMultiDottedExtensions = true; 

    if (od.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
    { 
     if (System.IO.Path.GetExtension(od.FileName).ToLower().Equals(".lnk")) 
     { 
      MessageBox.Show(//xxxxxxx how to sho the parameter?); for example output c:\\.....\hl.exe -a -b -c -d -e 29332 
     } 
    } 
} 
+0

請對你想達到的目標做更多描述。此外,張貼你到現在爲止。當您選擇一個快捷方式時,文件的路徑將返回。你有沒有使用參數定義的快捷方式,你不知道如何讀取快捷方式中設置的參數? – alexandrudicu

+0

顯示你的代碼,我們打算做什麼?爲你寫所有代碼?:)顯示一些發明 – wudzik

+0

@alexandrudicu我需要的目標文件名和參數(自變量)的完整路徑打開應用程序 – user2277061

回答

2

我不明白問題在這裏。你說你已經發現了FileDialog.DereferenceLinks屬性,它正是你想要的。

當它設置爲true時,對話框將取消所有快捷方式的引用,返回它們指向的項目的路徑,而不是快捷方式文件本身的路徑。只有當它設置爲false時,纔會得到從對話框返回的帶有.lnk擴展名的文件。

因此,您剛纔添加到問題中的代碼是錯誤的(或者至少使您的工作比他們需要更加困難)。它應該看起來更像這樣:

OpenFileDialog od = new OpenFileDialog(); 
od.DereferenceLinks = true; // set this to true if you want the actual file 
od.Multiselect = false; 
od.SupportMultiDottedExtensions = true; 

if (od.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
{ 
    // You will never get a path to a shortcut file (*.lnk) here. 
    Debug.Assert(!String.Equals(System.IO.Path.GetExtension(od.FileName), 
           ".lnk", 
           StringComparison.OrdinalIgnoreCase)); 

    // ... do something with the file 
} 

否則,取消引用快捷方式文件需要付出一點努力。您可以使用COM接口,我不相信它是由.NET BCL的任何部分明確包裝的。你需要編寫代碼來自己使用它。 我無法想象爲什麼你需要在這種情況下。

這就是如果您需要從快捷方式文件中讀取參數,您必須執行的操作。

  1. OpenFileDialog.DereferenceLinks屬性設置爲false,以便獲取返回的快捷方式文件。
  2. 您可能還希望將OpenFileDialog.Filter屬性設置爲Shortcut files (*.lnk)|*.lnk以確保用戶只能在之間在對話框中選擇快捷方式文件。
  3. 一旦用戶選擇了一個快捷方式文件,爲該文件創建一個IShellLink對象。
  4. 如果成功,請使用GetPath方法獲取包含快捷方式文件路徑和文件名的字符串,並使用GetArguments方法獲取包含與該快捷方式文件關聯的命令行參數的字符串。
  5. 最後,將參數字符串追加到路徑字符串的末尾。

您可以編寫包裝代碼來使用IShellLink COM接口從.NET自己,search online發現這已經被寫入一個(不知道它的質量保證,雖然),或添加參考ShellLinkObject類這是爲腳本設計,但仍然usable from .NET

+0

以我的情況下,輸出應該是這樣** 「C:\ ..... \ APP.EXE -a -b -c -d -e 234324」 ** – user2277061

+0

@ user2277061更新我的答案。我仍然不知道*爲什麼*你需要那個。但這是可能的。 –

+0

謝謝你的解決方案。我正在構建一個小應用程序作爲啓動器,它將列出我的計算機上的所有應用程序。以及將存儲到sqlite數據庫中的所有數據。該數據庫將存儲程序執行的位置以及打開該應用程序所需的所有參數。例如,「-cs-noforce hl.exe」來執行反恐精英遊戲。 – user2277061