我的LUMIA925已經買了很久了,想自己開發WP應用放在上面,卻一直想不到有什么特別的想法和需要。前幾天的事情正好讓我有了這個機會。
前幾天在客戶機房工作的時候,同事打電話來說另一個客戶由於換了電腦,需要發新的激活碼過去激活我們的軟件。我不得不打開本本,把同事發到手機QQ的機器碼輸入到本本上的注冊機程序里,再把生成的激活碼輸入到手機發過去。對於在外面本本不能上網的情況這真是一件繁瑣的事。晚上在家沒事的時候就想着把這個注冊機移植到我的LUMIA925上。安裝VS補丁和激活手機開發的步驟就不贅述了,具體百度之。我在VS2013中選擇的是Windows Phone應用中的空白應用。
先貼個圖演示一下winform版注冊機,實際用到的就是兩個Label、兩個TextBox和一個Button,用到的激活碼生成算法也很簡單,就是對機器碼做一個加salt的MD5操作。

對照winform版的界面,再考慮手機操作的便捷性,最后WP版的效果就是這樣的:

winform中的label替換成了WP中的TextBlock,另外再添加了兩個AppBarButton,作為“清除”和“復制”的按鈕。
然后開始寫代碼,卻發現一下掉到兩個坑里了。。。
坑1:WP8.1中沒有默認提供MD5CryptoServiceProvider類,只能自己實現。還好在網上搜到了前人寫好的,直接下載添加就可以用了。
坑2:WP8.1應用商店APP竟然不支持對剪貼板的操作!!沒辦法,最后采用的是點擊“復制”按鈕,自動全選激活碼並彈出Toast通知,代碼如下:
private void btnCopy_Click(object sender, RoutedEventArgs e)
{
txtActivationCode.Focus(FocusState.Programmatic);
txtActivationCode.SelectAll();
XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText01);
// 找到模板中“'text'”元素,然后添加通知的內容
XmlNodeList elements = toastXml.GetElementsByTagName("text");
elements[0].AppendChild(toastXml.CreateTextNode("激活碼已全選,請手動復制!"));
// 通過通知的模板創建一個Toast通知
ToastNotification toast = new ToastNotification(toastXml);
// 彈出通知
ToastNotificationManager.CreateToastNotifier().Show(toast);
}
注意1:與winform不同,在使用TextBox.SelectAll方法之前,必須先對TextBox設置焦點;
注意2:.程序中使用Toast通知,需要在創建應用程序包之后自動生成的Package.appxmanifest中“支持Toast通知”選擇“是”。效果如下:

終於做好了我的第一個WP應用,總算對得起我的925了,只可惜復制功能還是有缺陷,只能期望WP10里能夠修正這個問題。
