HOW TO COMMUNICATE BETWEEN METRO UI AND DESKTOP UI ON WIN8 (part2)

From last article “HOW TO COMMUNICATE BETWEEN METRO UI AND DESKTOP UI ON WIN8”, it talking about to pass the control between Metro/Desktop application.

However during programing on Metro and Desktop, you might need some communication mechanism for Metro/Desktop application.

I just provide my experience for this kind of question, here is my solution for communicate between Metro and Desktop on Win8 Customer Preview.  (I also feedback on MSFT forum here)

  1. Write a application to listen TCP as information center which call “DesktopSvr” (ex: here)

  2. Metro app try to send message to localhost via streamsocket (P.S. localhost is not work, but 127.0.0.1 work well).

  3. “DesktopSvr” will pass desktop app via IPC or anyway you familiar.

Metro application communication guidline:

  • Desktop might also pass some data to “DesktopSvr” it will be our information center.

  • Metro:

    • Since Metro UI will not get any TCP feedback if app under suspends, so communicate between metro app via TCP seems not possible here.

    • Metro app only get TCP event when it is remain as alive. (ex: StreamSocket.)

    • Metro app only take feedback and response when event register. (ex: SystemTriggerType), so Metro app might need take more pooling query information to our “DesktopSvr”.

    • Metro app might not to communicate to another Metro app, it is possible for “Metro A” to pass to “DesktopSvr” and “Metro B” also try to retrival information to “Desktop”.

  • Desktop:

    • Desktop is easy to communicate with other desktop app via original way.

    • Desktop might also need pass information to “DesktopSvr” first, and Metro app will try to get it from “DesktopSvr”.

How to communicate between Metro UI and Desktop UI on Win8

It just a summarize to explain MSFT sample: Association launching sample.

  • Metro UI to call Desktop UI

    • File extension call:

      • Add default open on registry if you want create new one.

        • [HKEY_CLASSES_ROOT.XXX]
      • Using Windows.System.Launcher.launchFileAsync

    • Protocol call: (such as “http://”, “mailto://”)

      • Add default protocol on registry if you want create new one.

        • [HKEY_CLASSES_ROOT%PROTOCOL%] [HKEY_CLASSES_ROOT\%PROTOCOL%DefaultIcon] @=”C:\Program Files\XXX.exe,0”[HKEY_CLASSES_ROOT\%PROTOCOL%shell] @=”play”

[HKEY_CLASSES_ROOT\%PROTOCOL%shellopen] @=””

[HKEY_CLASSES_ROOT\%PROTOCOL%shellopencommand] @=”“C:\Program Files\XXX.exe” %1”

[HKEY_CLASSES_ROOT%PROTOCOL%shellplaycommand] @=”“C:\Program Files\XXX.exe” %1”

  * Using Windows.System.Launcher.launchUriAsync

P.S.: Since it is Async, please note you might need handle it well to make it work. :)

Metro UI to call Desktop UI

* 

File extension call

  * 

Add on “package.appxmanifest” “Declarations” to add “Protocol”.

  * 

Handle callback feedback and launch this app.

  * 

Double click file on desktop UI.

* 

Protocol call: (such as “http://”, “mailto://”)

  * 

Add on “package.appxmanifest” “Declarations” to add “File Type Associations”. (ex: “sampleApp://”)

  * 

Handle callback feedback and launch this app.

  * 

Type “sampleApp://” on file browser or IE.

  * 

You could using code “ShellExecute(NULL, _T(“open”), _T(“sampleApp://”), NULL, NULL, SW_SHOWNORMAL);”

How we use it?

To transfer control between Metro/Desktop.

To Write a launcher on Metro UI for your desktop application.

Express app on Metro UI and Pro app on desktop.

Refer:

Windows 8- 8250 note

  1. Windows 8 8250 is official Win8 beta which release on 02/29

  2. It not include VS2011 which vs2011 beta also release.

  3. Only VS2011 Express for Win8 has “Store” publish.

  4. ACK/HCK is not include with Win8 beta but include on VS2011 beta

學習日誌-LINQ心得

最近再研究如何寫出一個aggregator, 首先把LINQ跟JSON都看了一下。試著想找出一可以方便在各大相片網站找資料的共通語言,由於codeplex上面有Linq.Flickr這個open source 的library,也開始試著研究。

參考: 使用linq.flickr搜尋相片

Note:

  1. 由於改WLWPlurk,稱這次機會把手邊平台由VS2008改成VS2010。也裝了Visual Studio Achievements

  2. 為了開發快一點也把順手語言改成C#,不過後來發現Linq.Flickr是.Net3.5的~ 竟然也踩到了3.5 與 4.0 不共通的弊病。 所以也在Add reference 卡了一下。

  3. Flickr user name 不是URL上面的userID 而是user definded 的名字,為了這個我還以為是我安裝有問題~ 認真的trace 下Linq.Flickr去。

如何把寫好的 Windows Live Writer plugin包裝成安裝檔 (How to package your Windows Live writer plugin?)

(copy from my another site)

由於要修改去年寫給自己用的小工具 (WLWPlurk),看到其他在Codeplex上面的人都是用WIX(Windows Installer XML)來做包裝plugin的動作。

所以也去好好的搜尋一下有沒有相關可以用的東西。 由於我自己也不是專業在做Installer的人~ 裡面的一些設定也真的把我搞糊塗,才了解前因後果。還好找到了相關的文件WiX Script for installing Live Writer Plugins,雖然他上面的sample是針對 WIX 2.0,不過我也把它修改過後分享給大家。

希望有需要的人就拿去用吧。

  1. Install WIX 3.6 from http://wix.sourceforge.net/downloadv3.html

  2. Setup your path setting to your install path.

  3. Inser follow code (it should be XXX.WXS)
    (refer from http://wlwextensionlearning.blogspot.com/2012/02/windows-live-writer-plugin-how-to.html)

  4. You might need repace follow string as follows:
    1. {$Plugin Name$} : your plugin name

2. {$InstallGUID$}: A GUID for your installation program 
   
3. {$Manufacturer$}: Manufacturer name 
   
4. {$PluginGUID$}: A GUID for your plugin 
   
5. {$Description$}: A description for your plugin 
   
6. {$FILE_ID$}: ID for your binary which need install. (could be multiple file) 
   
7. {$FILE_NAME$}: Name for your binary which need install. (could be multiple file) 
   
8. {$FILE_Address$}: File address for your binary which need install. (could be multiple file) 
  1. Compiler your WIX source code
    1. candle XXX.wxs
2. light -ext WixUIExtension XXX.wixobj 

WLWPlurk 2.0 installer release

這幾天弄了好久~ 好不容易把Windows Installer XML (WIX) 3.6給搞懂。
等等寫另外一篇來記錄詳細資料,在這裡先請有需要安裝檔的去下載吧。

http://wlwplurk.codeplex.com/releases/52834/download/342411

有任何需要改進的麻煩留言告訴我!!