這是昨天一個學生問我的問題『怎麼從 Windows Store App 啟動 Desktop Application?』,這是個好問題而且引起了我的興趣,老實說,壓根兒從來沒想過這種情境,但這問題真的太有趣了,答案是:『的確有辦法從 Windows 市集應用程式啟動桌面應用程式,重點是一點也不難』,接下來就來看看是怎麼達成這樣的需求。
這是昨天一個學生問我的問題『怎麼從 Windows Store App 啟動 Desktop Application?』,這是個好問題而且引起了我的興趣,老實說,壓根兒從來沒想過這種情境,但這問題真的太有趣了,答案是:『的確有辦法從 Windows 市集應用程式啟動桌面應用程式,重點是一點也不難』,接下來就來看看是怎麼達成這樣的需求。
一開始我想聊聊思考這問題的路子,第一個想法是:『 一個 Windows 市集應用程式如何啟動另外一個 Windows 市集應程式?』,這個答案很明顯,通常是透過 URI 或 File Association 來達成。既然如此,Windows 市集應用程式應該也可以透過這種方式來啟動桌面應用程式才對。然後我就做了一個實驗,我在 Metro IE 上打上 mms:// 的通訊協定測試是否能夠啟動Windows Media Player,結果是正確啟動的;至此,答案已經很明顯了,既然 Windows Media Player 這個桌面的應用程式可以這樣被啟動,其它的應用程式也應該可以這麼做,於是我就開始動手測試與驗證自己的想法是否正確。
整個的測試過程是這樣完成的:
(1) 先做一個 Windows Forms Application 當做要被呼叫的對象,這個程式畫面只有一個 Lable,但為了要讓啟動時可以傳參數,稍微修改了一些東西。
Program.cs
Form1.cs
(2) 接著我在電腦的機碼中新增自訂的 URI Protocol, 命名為 callbill,參考 Registering an Application to a URI Scheme
(3) 最後新增一個 Windows 市集應用程式專案,在 UI 上放一個 Button ,為 Button.Click 事件撰寫委派函式如下