簡體   English   中英

如何通過打開具有自定義文件擴展名的文件來查找觸發的文件路徑?

[英]How do I find out the path of the file triggered by opening a file with a custom file extension?

如何獲取用於打開程序的文件的位置?

示例:如果我創建一個新的擴展“.xyz”說,我告訴Windows我想用myapplication打開文件類型.xyz,然后它啟動我的應用程序。 很好,但我的應用程序如何處理用於啟動它的文件的文件路徑?

此外,有沒有辦法只保留我的應用程序的一個版本運行和打開的新文件只是調用我的應用程序中的方法? 例如,如果您使用torrent並打開5個.torrent文件,他們只會傳遞給一個應用程序。

附帶問題:所有文件擴展名都是3個字母長,是否有一個公開使用的列表? 如果我正在創建文件擴展名,我不想使用已經使用過的文件擴展名。

創建文件關聯時,指定了Explorer應運行的命令行以激活程序。 shell也將文檔文件的名稱放在命令行中,因此在程序中檢查命令行參數 如何做到這一點取決於您的語言和開發環境。 在Delphi中,使用ParamCountParamStr函數。

創建文件關聯時,可以准確指定文檔文件名稱應在命令行上的位置。 在命令行的某處使用%1 ,shell將用文件名替換它。 由於Windows文件名經常包含空格,因此應在文件名周圍加上引號,因此文件關聯中的命令行如下所示:

ArthurApp.exe "%1"

使用該關聯,雙擊另一個文檔文件將啟動程序的另一個實例。 如果您希望在已經運行的實例的另一個窗口中打開文檔,那么您可以編寫代碼以使程序在啟動時查找已經運行的實例。 如果找到一個,那么它可以與該實例通信以告訴它要打開哪個文件。 您可以通過多種方式實現該通信,包括郵件槽,套接字,命名管道,內存映射文件和DDE。

shell的文件關聯機制已經有了通過DDE進行通信的方式,因此程序的第二個實例根本不會啟動。 相反,shell將啟動與已經運行的實例的DDE對話,並以這種方式告訴它新的文件名。 然而,DDE似乎現在已經失寵了,所以首先查看一些其他選項。

對於你的問題,不,擴展名並不總是三個字符。 環顧四周,這應該是顯而易見的:C代碼進入.c文件,Adobe Illustrator圖形進入.ai文件,新的Microsoft Word文檔進入.docx文件。

但要注意。 如果你要求**。doc *,結果將包括.docx文件。 這是因為FindFirstFile匹配短文件名和長文件名,而具有長文件擴展名的長文件名在其短文件名版本中具有三個字符的擴展名。

Rob精美地回答了你的問題。

至於最后一部分,是否存在文件擴展名的公共列表 - 不是這樣,但是有shell.windows.com,Web服務資源管理器用於查找未知文件擴展名的處理程序。 您可以組成一個擴展,然后查詢shell.windows.com以查看它是否已注冊。 例如,要檢查擴展名.blah是否已由.blah上的任何人注冊,只需在任何瀏覽器中打開此URL:

http://shell.windows.com/fileassoc/0409/xml/redir.asp?ext=blah

當然,用你的擴展名替換尾隨的blah

您可以在KB929149和Raymond Chen的帖子中找到有關此內容的更多詳細信息.shell.windows.com哪里獲取有關文件擴展名的信息,以及如何參與該操作?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM