2009-01-08 50 views
1

我有一個已被其他答案部分覆蓋的情況,但我找不到完整的答案。簡而言之,我們試圖將URL用於我們特定的數據類型,當雙擊時會打開我們的應用程序並將這些數據集加載到該應用程序中。我們有這部分工作。如何在不打開應用程序的新實例的情況下在運行應用程序中打開新文檔?

(例如,URL可能看起來像這樣:資源://shaders/basic_shader.hlsl)

我們想這樣做是爲了防止新的應用實例,從開盤時,一個新的URL是雙擊。例如,假設我們有一個在我們的着色器編輯器中打開着色器的URL。當點擊這個資源URL時,它會打開我們的着色器編輯器。點擊新的着色器URL後,我們希望能夠在當前運行的應用程序中打開着色器,並讓它在我們的編輯器的新選項卡中打開新的着色器。

如果我們的應用程序的另一個實例正在運行,我們可以很容易地檢測。我們不知道如何輕鬆解決的問題是如何告訴當前正在運行的應用程序打開這個新文件進行編輯。這種行爲非常像Apple Finder。

在UNIX中,你可以通過讓你的應用程序中打開某些命名管道,然後新的應用程序可以檢查是否這條管道是積極的,然後發送文檔數據向下管模仿這種行爲。是否有一個更標準的窗口方式來實現這種行爲?

我們需要一個C/C++解決方案。謝謝。

+0

你知道URI類型實際上是全局的嗎?聲稱「資源」相當貪婪。 vnd- <你的名字) - 資源:更有意義。此外,避免//對於非層次化的URI – MSalters 2009-01-08 16:19:09

回答

1

創建一個名爲互斥體,當大衛·格蘭特說,然後顯示第二URL的用戶界面之前,檢查這個互斥體,如果已經創造了它,然後應用程序啓動只是通過將新網址率先推出應用程序退出(有接口的應用程序設置的URL,並告訴以編程方式重定向)

+0

回到老問題 - 這是我們如何實現它 – Mark 2011-02-01 01:45:24

0

您無法避免與要執行的網址相關聯的程序。

的「Windows」解決方案,將發送消息(昔日通過DDE但也許有一些更「現代」現在)與URL然後退出以前運行的應用程序...

2

命名管道是最好的方法。 應用程序的第一個實例打開管道並監聽它(使用PIPE_ACCESS_INBOUND作爲dwOpenMode,並且相同的代碼也允許您檢測運行實例)。 所有後續實例檢查它們不是單獨的,將命令行參數發送到管道並關閉。

+0

爲了防止競爭,順序非常重要。 – MSalters 2009-01-08 16:16:03

0

我得到這個工作得很好我的C++ MFC應用A按照約瑟夫新人的教程here。他使用在啓動時檢查的已命名互斥體,並將消息發送到已運行的應用程序,並打開新資源。

相關問題