|
目錄
傳言win8改變了很多,恩,廢話。我希望試圖從開發人員關心的角度來了解一下win8,對于用戶而言,其實我覺得win8改變真的不多,無非就是修改了一下開始界面,然后程序會使用metro風格的界面,對于開發人員來說,可能變化的比較多,多了很多新名詞,我希望能對其有所了解,所以記錄一下我所看到的,當然,由于win8其實只是一個預覽版,很多東西我覺得還是會變的,所以真正的東西出來的時候或許還會有些不一樣吧。
首先關于變化,我想到的是“程序”是如何“安裝”和“運行”的,之所以用這么多引號,是因為變化太多,我甚至不知道該不該用“安裝”等來表達。有點亂,慢慢來吧,有新的發現就更新下面的內容。
(1) win8程序的類型
win8新增了metro,主要是希望便于平板等觸摸設備上使用。從大的類別分,win8上的程序分為desktop和metro程序(暫且,我就這么分吧,因為據說win8會有多個版本,支持arm和x86處理器,并不是所有處理器都支持desktop和metro版本,PS:我所使用的是MS的64bit+VS11的preview 版本,安裝在VBox中)。
對于desktop程序,只能運行在“desktop”環境下,metro風格的程序,只能運行在“metro”環境下。desktop環境,就和我們的win7類似。至于“metro",在后面還會慢慢的研究。
(2) desktop程序如何"安裝"到"開始界面“中
說明:這里說的程序是desktop的。
簡單來說,對于一個exe文件,通過創建其快捷方式(假設為hello.exe - shortcut),將快捷方式放到:
C:/ProgramData/Microsoft/Windows/Start Menu/Programs
中,或者在這里創建一個文件夾,放到文件夾中也是可以的。然后,到win8的start界面中,查找這個程序的名字hello.exe,就會出現了,用右鍵選中這個程序,就可以將其pin到start界面中。
問題一:一個程序pin到start界面,這些pin的信息保存在哪里的?
只要在C:/ProgramData/Microsoft/Windows/Start Menu/Programs,那么在start界面搜索都是可以出現的,那么這個比較容易理解了,搜索會自動去這個目錄下遍歷。那么哪些程序被pin了,這些信息保存在哪?相信肯定是某個注冊表項的吧,具體就不去找了。
問題二:所有能在start界面搜索到的程序(的快捷方式)都是在上面這個目錄下保存的嗎?
事實上,C:/Users/<username>/AppData/Roaming/Microsoft/Windows/Start Menu/Programs目錄下也是可以保存的。至于還有沒有其它目錄也可以被start界面搜索到,那就不清楚了。
總結:傳統的desktop程序在win8下都是沒有問題的,win32的API那些東西都還是支持的,什么MFC都是可以用的,弄個快捷方式到metro風格的start界面上也是可以的,只是運行還是會自動切換到desktop模式下。下面的內容開始探索metro程序到底是怎么”運行“的。到底是二進制本地運行還是在.NET虛擬機上運行,還是在一個所謂的native實際上還是“虛擬機”的解釋環境下執行,慢慢來吧。
(1) Metro程序支持的開發方式和語言
對于Metro風格應用開發,可以使用JS實現程序邏輯,結合HTML5/CSS3設計用戶接口;也可以使用C++, C#或VB結合XAML來實現用戶接口,使用Native C++或托管C#或VB來實現應用程序邏輯。對于Metro風格的C++游戲,可以使用Native C++的DX11庫和HLSL等。
對于Win8,本地擴展允許用戶構建可重用的組件庫,可以使用C++、C#或VB構建組件,然后使用JS或者其它的支持的語言在程序中調用這些組件。
(2) 下面是Win8提供的VS11預覽版對Metro支持的工程選項
(3) 使用JS實現的hello, metro
實現hello, metro很簡單了,用VS 11新建一個最簡單的JavaScript工程,默認的工程模板如下:
簡單分析一下,這里有css文件夾、images文件夾、js文件夾、winjs文件夾和default.html和一個manifest文件。其實,和一般的web程序是一樣的,default.html是“起始頁”,css和images和js文件夾是對應的一些引用的文件了。winjs文件夾,重點說明一下,是win8為基于JS的metro程序創建的一個JS庫吧,暫且理解這么多。然后package.appxmanifest,對于開發人員都很熟悉了,打包用的一個列表文件,在VS中,雙擊打開可以使用UI的方式編輯了。打開default.html,里面其實就是對其它的css/js文件的一些引用了,就是提供了一個簡單的模板工程了。
到了這里,我已經大概猜測到了,基于JS的metro程序最后還是打包一下,放到一個“虛擬機"/"runtime"上去跑而已,原本以為MS會把JS編譯到二進制,成為native程序的,下面會進一步證明這一點。
簡化上面的工程,刪除css、js、和winjs文件夾,最后只剩下images、default.html、package.appxmanifest的內容。事實上,這才是一個”最簡單“的基于JS的metro工程。default.html內容如下:
<!DOCTYPE html>
<html>
<head>
<title>Hello,metro </title>
</head>
<body>
<button>
Hello, Metro with JS!
</button>
<p>
This is an metro app implemented by JS!
</p>
</body>
</html>
NET技術:Win8探索學習筆記,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。