2010-04-13 99 views
2

我想知道如果有人能指出我在正確的方向。例如,你知道在大多數IDE中,如果你使用「open with」打開源文件,它會運行程序並打開它?然後如果你打開另一個,它會在同一個進程中的新選項卡中打開它?程序如何處理「打開...」文件?

我的問題不是如何將程序添加到shell命令,而是:

  1. 如何將C#應用程序「接收」例如PDF文件?

  2. 當另一個文件與它一起運行時(無需程序的實例),應用程序如何在同一進程中打開該文件?

回答

5

當第二個程序實例啓動時,加載任何界面組件之前,檢查是否另一個程序實例已在運行。如果是這樣,它以某種方式(程序特定的:這可以是套接字,進程間中斷,共享內存等)與它通信它應該打開這個新文件。

將此信息傳達給第一個實例後,第二個程序實例將只是終止,因爲它不再需要。

+1

非常真實。並補充問題1的答案:文件名作爲參數添加到程序的新實例中,如「C:\ WINDOWS \ notepad.exe C:\ myfile.txt」中所示。在你的程序中,讀取參數字符串以獲取文件名。 – 2010-04-13 22:06:48

+0

感謝您的補充。我完全錯過了這部分問題! – 2010-04-13 22:09:31

1

你的程序必須能夠與其他自己的實例交談,並說「嗨,我已經打開了,你想做什麼,讓我爲你做。」

+4

這種關係通常是另一種方式:「嘿,是否有人已經開放?你能爲我做這個嗎?」 – 2010-04-13 21:49:15

+0

夠公平的:-) – Nate 2010-04-14 04:34:36

0

Microsoft程序通常在shell配置中有一個ddeexec鍵;這會導致shell向已存在的應用程序發送一個DDE命令。

+1

DDE已棄用。 – SLaks 2010-04-13 22:01:18

+2

也許如此,但我注意到Office 2007仍在使用它。我認爲這篇博文最後的評論總結得很好:http://blogs.msdn.com/oldnewthing/archive/2008/07/30/8790272.aspx – 2010-04-13 22:42:37