發表文章

目前顯示的是 2011的文章

在Windows CE中,如何修改IP設定之後立即套用新的設定呢?

在Windows CE中,通常我們會將網路卡設定一個固定IP,用來與其他的設備做溝通、通訊,那麼設定了IP之後,跟著就會有IP變更的需求了,那麼怎麼去變更IP呢? 從登錄檔中,可以看到IP的相關設定會在這個位置當中 HKEY_LOCAL_MACHINE\Comm\PCI\網卡名稱\Parms\TCPIP 其中會看到Ipaddress、defaultGetway、SubnetMask這三個就是對應到IP的設定了,要變更的地方也就是這三個了,而在compact framework 2.0對登錄檔的操作也有提供了類別可以使用,可以參考MSDN上的 相關類別使用說明 ,下面這邊是利用p/Invoke的方式來做 p/Inove的宣告 < DllImport ( "CoreDll.dll" , EntryPoint : = "RegDeleteKeyW" ) > _ Public Function RegDeleteKey ( ByVal hKey As Integer , ByVal lpSubKey As String ) As Integer End Function < DllImport ( "CoreDll.dll" , EntryPoint : = "RegCreateKeyExW" ) > _ Public Function RegCreateKeyEx ( ByVal hkey As Integer , ByVal lpSubKey As String , _ ByVal Reserved As Integer , ByVal lpClass As String , _ ByVal dwOptions As Integer , ByVal samDesired As Integer , _ ByVal lpSec

關閉接收中的UdpClient

在撰寫Udp相關的應用時,呼叫Receive方法時會等候到接收了資料為止;因為這個特性,通常會使用另外一個Thread來處理Udp的動作,例如說一個接聽廣播封包的thread,專門對特定的port number等候廣播訊息,而接聽到指令之後進行特定動作,程式碼可能長的像是下面這樣 Private Sub WaitForCommand ( ) Do If _bolStop Then Exit Do Try btyRecv = _client . Receive ( _anyEndpoint ) If btyRecv . Length > 0 Then If ByteToStr ( btyRecv ) = "command" Then ''do something End If End If Catch ex As Exception ''錯誤處理 End Try Threading . Thread . Sleep ( 100 ) Loop End Sub 當執行到_client.Receive之後,就會在這一行指令等候資料接收,那麼在這個狀況之下,如果應用程式必須要關閉的話,要怎麼處理呢?Thread.Abort() ? 這個時候如果呼叫Thread的Abort方法還是無法停止Thread的運作 Orz 那麼應該怎麼做呢?搜尋了一下之後發現方法也是出乎意料的簡單,直接呼叫UdpClient的Close方法就可以了,那麼就可以用類似下面的方式來停止等候接收 Public Sub [ Stop ] ( ) _bolStop = True Try

你知道WP7的模擬器也有中文輸入嗎?

圖片
這篇我應該是Lag很大,不過由於有實機可以測試就一直沒去看模擬器的設定 XD 今天看了一下,模擬器中也有中文輸入的設定可以使用,下面就直接用幾張圖來看吧~ 簡短的分享一下我 Lag很大的資訊 Orz

自訂ValueConverter (值轉換器)

圖片
在Silverlight中,Binding(資料繫結)是一個很強大而且方便的功能;利用Binging可以將元素的屬性跟其他的元素屬性作綁定,或是綁定到我們自訂定義的類別。詳細的下次再來談,這次先來看看ValueConverter;轉換器所扮演的角色是做為一個中介,例如說我們想要將一個Checkbox的Visibility綁定到自訂的類別屬性上面去,那麼應該要怎麼做呢?下面就來看看這個部分 假設現在有一個類別叫做clsImageItem,裡面定義了一些屬性,例如 public uint ImageWidth { get; set; } public uint ImageHeight { get; set; } public int ImageIndex { get; set; } public bool IsEditMode { get { return _IsEditMode; } set { _IsEditMode = value; NotifyPropertyChanged("IsEditMode"); } } 而在介面的設計上,放了一個StackPanel,StackPnael中放置了一個CheckBox以及Image;希望達成的效果是在一般的情形下,CheckBox是不可見的,而進入『編輯模式』的時候,就將CheckBox給顯示出來,介面的XAML大概會像是這樣 < StackPanel  Orientation = "Horizontal"  d : DesignWidth = "290" > < CheckBox  x : Name = "chkMark"  VerticalAlignment = "Top"  Width = "55" Visibility

Cross-domain calls for Silverlight apps on self-hosted service

最近開始將一些新的App改用WPF來實作,而在撰寫的過程中也一起試了一下Silverlight,畢竟如果用SL可以搞定的話,Web部屬的方便性還是要比Client-Server一台一台去安裝要來的方便很多的。 而在測試Silverlight的過程中,想起在之前就有看過一些安全性的規定,在跨網域(cross-domain)的狀況下,Silverlight是會被限制存取的;而現在大部分的App後面都帶著一隻Windows Service,並且裝載了WCF Service提供呼叫,所以就優先來測試一下這個部分了。 在進入今天的正題之前,先來看一下在一般的情形下(這裡的一般指的是裝載在IIS上的Service或是網站資源等狀況),Silverlight apps如果需要跨網域去存取資源的話要怎麼做呢? 首先先說一下跨網域,跨網域的意思是什麼呢?比如說Silverlight裝載的位置是http://www.myweb.com/myApp,而開始執行App之後,假設App需要去呼叫位於http://www.othersite.com/xxxx.asmx所提供的Web Service,那麼這個時候的動作就是cross-domain了,那怎麼去處理這個問題呢?首先可以參考一下這篇資料 讓服務可跨網域界限使用 在上面這篇文章可以看到有兩種方式可以處理,加入『clientaccesspolicy.xml』或是『crossdomain.xml』都可以,首先要特別注意的是 不論使用哪個檔案,都必須放置在服務的提供端,而 不是 放在Silverlight app這邊 ,所以如果提供服務的這端如果不是你自己可以控制的,那麼就要聯絡服務端,確認是不是可以開放呼叫的權限,要不就是要另外自行撰寫另外的Service來做中介,一邊向原始來源取得資料,另一邊提供給Silverlight app使用了。 這邊簡單的看一下clientaccesspolicy.xml的內容,檔案內容會長的像是下面這樣 < access - policy > < cross - domain - access > < policy > < allow - from http - request - headers = "SOAP

Android - 安裝Android SDK後,無法正確啟動模擬器問題

在開發Android時,在安裝開發環境之後,還必須要安裝 Android SDK ,而要測試我們開發的應用程式時,模擬器是一個不可或缺的工具,但是安裝好SDK之後,卻老是得到下面這樣的錯誤訊息 Invalid command-line parameter when running the Android emulator 這是怎麼一回事,連最簡單的Hello World都Run不起來..經過搜尋之後,在 這篇 找到了解答;原來依照預設,SDK會安裝在像是下面路徑的位置 C:\Program Files\Android\android-sdk 而啟動模擬器時,在解析Program files中的空白字元時會發生問題,因此沒有辦法正常啟動模擬器;那麼知道問題之後,依照上面參考來源中的方式,修改一下SDK的路徑設定就可以啟動模擬器了。呼..總算是看到Hello world了

A quick look at Windows 8

圖片
這篇是在 Plurk上面看到 的相關訊息,有興趣的朋友可以前往觀看一下喔 A quick look at windows 8 ,在下面是介紹的影片

[資源推薦] Windows 7 技術資源中心

圖片
各位鄉親,現在在Microsoft的網站上,針對一般使用者使用的OS,有提供了相關的資料整理;舉凡網路相關、安全性以及軟硬體相關的形容性議題等等,有相當多的參考資料可以參考、閱讀哦,有興趣的千萬別錯過了,可以直接點選下面圖片前往喔

Windows Phone 7 - Mango

相信有wp7的朋友都在一直期待mango的更新快點推出,不過看起來還需要一段時間 Orz ,目前官方是說秋天... 不過一些新更能與細節倒是可以先體驗一下,來看看介紹的影片過過乾癮吧

Windows Mobile 6.x Application Submissions to Stop on July 15, 2011

今天收到了一封來自Windows Phone Marketplace的郵件,其中提了一下WP7 Mango更新的狀況之外,主要是在說明,在7月15日之後,原先WM6.x(包含6.0,6.1,6.5,6.5.3等)的App,就不能夠再上傳到Marketplace或是進行更新了,節錄部分的原文如下 • App Submission and Management. On July 15, 2011, we will no longer be accepting new Windows Mobile 6.x applications or application updates. In addition, it will no longer be possible to modify prices, metadata, or other information. However, you will still be able to remove your apps by contacting support. 有在開發WM應用程式的朋友要留意一下了,其餘部分就請留意一下email內容了

在WP7中方向感應器的偵測(Accelermoter)

在目前新的手機上都配有方向感應器(或是稱加速度計?),很常見的用途是當你的手機改變方向的時候,畫面也可以隨著方向的變更進行自動的切換,這真是一個很優的功能;或是一些類似賽車等的小遊戲,甚至不需要方向鍵來操控方向,直接用偵測器來偵測手機擺動的方向,玩起來更有感覺;那麼在WP7中應該要怎麼去抓目前手機的方向出來呢? 下面簡單的做個測試,首先要先引入命名空間 using Microsoft.Devices.Sensors; 之後利用Accelerometer類別就可以偵測了,主要必須要處理ReadingChanged的事件,例如下面的方式 try { Sensor = new Accelerometer(); Sensor.ReadingChanged += new EventHandler (Sensor_ReadingChanged); Sensor.Start(); tbState.Text = "Accelermoter detect started"; } catch (AccelerometerFailedException) { tbState.Text = "Start Acceleromter error"; } 事件處理的程式碼部分大致會像是下面這樣子 void Sensor_ReadingChanged(object sender, AccelerometerReadingEventArgs e) { this.Dispatcher.BeginInvoke(() => ReadingChanged(e)); } void ReadingChanged(AccelerometerReadingEventArgs e) { tbData.Text = "X: " + e.X.ToString() + Environment

在WP7複寫硬體返回鍵的動作

在WP7中的硬體按鍵中,返回鍵預設的功能是返回上一頁,或是返回上一個執行的App;而在開發WP7的應用程式時,有時我們必須去處理這個動作,例如說目前的頁面是給使用者填入資料用的,在接收到硬體返回鍵的動作時,應該要加以提醒使用者,以免離開後輸入的資料都不見了,畢竟在裝置上面打字不是一件舒服的事情的.. 那麼應該要怎麼去處理這個動作呢?程式碼的部分也很簡單,首先是掛載事件的處理 this.BackKeyPress += new EventHandler (SecondPag_BackKeyPress); 之後做相關的處理就可以了,比如說下面這個樣子 void SecondPag_BackKeyPress(object sender, System.ComponentModel.CancelEventArgs e) { if (!boltmp) { boltmp = true; e.Cancel = true; this.PageTitle.Text = "BackKey canceled"; } } 其中e.Cancel=True這行就是取消返回的動作了,是不是很簡單呢? 另外在頁面轉換的過程中,他是以環狀的方式在進行,也就是說當你用Navigate的方式去尋覽至一個頁面時,這個頁面就會被加入堆疊中,而按下back就會回到堆疊中記錄的上一個頁面,如果你的App使用情境跟這個方式有所牴觸的話,下面這邊有一篇很棒的文章可以參考喔,把Sample下載回來跑一下,就可以知道他是在做什麼的了 Solving Circular Navigation in Windows Phone Silverlight Applications

Tilt Effect for Windows Phone

在MSDN上的範例中, 可以找到Tilt Effect的範例 ;不過這個Tile Effect是幹啥用的呢? Tile Effect是可以幫你的控制項(元素)套用上像是在首頁中的Tile或是程式列表按下去時候的感覺,會有凹下去的樣子,有了這個效果會比較明顯的看出跟使用者間是比較有互動的,那麼要怎麼使用呢?使用的時候您可以先從MSDN上下載範例程式碼,其中就會包含了TiltEffect.cs這個類別檔案,之後將這個檔案加入到你的專案中,之後在XAML的部分設定一下,就會自動套用了喔;設定的方式大致像是下面這樣 要先加入xmlns xmlns : local ="clr-namespace:ControlTiltEffect" 之後,要設定成啟用 l local : TiltEffect.IsTiltEnabled ="True" 是不是很簡單呢,趕緊動手來試試看吧。下面我把PhoneApplicationPage相關的設定整個貼上來,一起參考應該會比較清楚一些 < phone : PhoneApplicationPage     x : Class ="RssReader.MainPage"     xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"     xmlns : x ="http://schemas.microsoft.com/winfx/2006/xaml"     xmlns : phone ="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"     xmlns : shell ="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"     xmlns : controls ="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls"     xmlns

Windows Phone Developer Tools January Update

圖片
各位鄉親啊,Windows Phone 7的開發工具有更新了喔,趕緊前往下載安裝;您可以參考一下下面這篇文章 Windows Phone Developer Tools January Update 其中也有下載的連結位置;這次的更新除了修正一些問題之外,也為了即將推出的Windows Phone 7 ROM更新,在模擬器上加入了『複製以及貼上』的功能,可以搶先體驗一下;複製貼上的動作是當你在文字框中選擇一個文字時(單擊文字),就會出現像是下圖的複製按鈕 這個時候可以擴大你的選取範圍(點住文字之後向左或是右拖曳),或是點選複製的按鈕;而點了複製的按鈕之後,在輸入鍵盤的上方就會出現貼上的按鈕,像是下圖 以這樣的方式來達到複製跟貼上的功能;而大致上來說,在這次的ROM更新,我們的應用程式不用做什麼修改就可以直接套用上去,而在上面文章連結中也有提到, 當你的應用程式中有使用到Pivot或是Panorama的時候要特別注意,在Pivot或是Panorama中不要擺放TextBox ,因為在使用複製或是貼上的功能時,會有拖曳的動作,而這個動作在Pivot或是Panorama中會有誤動作產生,也就是跟原本的頁面拖曳的行為有衝突了,這個要特別的留意一下喔。

OpenNETCF.Desktop.Communication在x64電腦上出現"數學運算導致溢位"或是"找不到檔案"的錯誤訊息

圖片
當有需要將Windows Mobile的裝置中的資料給抓回來電腦的時候,通常第一個想到的就是利用RAPI或是利用OpenNetCF提供的Communication類別來做,而當使用OnenNetCF提供的類別來做的時候,在x64的電腦上,你會發現在呼叫方法的時候,常常會莫名其妙的出現『數學運算導致溢位』或是『找不到遠端檔案』的錯誤訊息,真的是名奇妙,明明沒有做運算,天外飛來這筆還真是令人找不到頭緒。 經過搜尋相關資料以及經過一些測試之後,終於找到了元凶,相信您從標題中已經看出了端倪,為什麼強調x64?是的,OpenNetCF在x64的環境中直接使用會出現問題,這個跟Access的OleDB在x64中的問題極其類似,解決的方式就是要修改一下編譯的設定,將Any CPU變更為x86 經過設定之後就可以順利運作了 YAYAYA~ 如果您需要Desktop.Communcation的使用說明,這邊有一篇很棒的文章不要錯過了喔 [推薦工具]OpenNETCF.Desktop.Communication Library

ShellTileSchedule;定時更換應用程式在Tile的背景圖片

在WP7中,當應用程式安裝完成之後就會出現在應用程式的列表當中,而在應用程式上長按之後,就會出現Pin to start的功能;這個功能是能夠讓你將你的應用程式顯示在首頁的Tile畫面上;而應用程式放到Start畫面上之後,最會最常被使用者看到、點選的,那麼我們就會希望幫在Start畫面上的應用程式上加上一些訊息,很常見的例如說Email的應用程式會顯示有幾封新的郵件這樣;而除了使用文字的方式來顯示訊息之外,也可以變更背景的圖片,來讓使用者有不一樣的感覺,例如說一個顯示目前天氣狀況的應用程式,用鮮明的圖片來做顯示就會比裡用單純使用文字說明來的更好。那麼,該怎麼變更應用程式的背景圖片呢? 更新應用程式的背景圖片可以使用Push Notification來做,Push Notification能夠做到滿多事情的,而如果說不想要使用Push Notification呢?今天要跟各位介紹的就是另一種方式,利用ShellTileSchedule來做;ShellTileSchedule能夠定時的連到你指定的位置去下載圖片,下載完成之後,就會變成應用程式的背景圖片了。在開始之前,應用程式使用的圖片有一定的規格,建議您依照對應的規格來做圖片的處理,您可以參考在MSDN的這篇介紹 Windows Phone 7 應用程式圖示製作指南 ,上有有相當詳盡的說明喔。 接下來來看看程式的部分,使用ShellTileSchedule的程式碼相當的簡單,例如下面的樣子 sts.Recurrence = Microsoft.Phone.Shell.UpdateRecurrence.Interval; sts.Interval = Microsoft.Phone.Shell.UpdateInterval.EveryHour; sts.StartTime = DateTime.Now; sts.RemoteImageUri = new Uri(@"http://bauann.myweb.hinet.net/test01.png"); sts.Start(); 像是上面的程式碼便會在每個小時到筆者放圖片的位置去下載圖片,並且設定為應用程式的背景圖片;接來來來看看一些屬性的用途是做

在WP7的TextBox如果需要Click事件該怎麼做呢?

已經忘了在哪邊看到相關的文章了,不過還是筆記一下;在預設TextBox上面只會有MouseLeftButtonDown這個事件可以偵測使用者是否點選,而這個事件是一點選就馬上會觸發了,如果想要Click的效果,也就是按下、放開,這樣的動作才要觸發的話,就要而外的處理一下;這類的需求是比較少見一些,不過如果需要在TextBox上實作Click的動作的話可以參考下面的方式。 首先建立一個新的類別,在這個類別中會繼承原先的TextBox,並且加上一個自訂事件 namespace MyCtl { public class nTextBlock : TextBox { bool isMouseDown = false; public delegate void deOnClick(object sender,MouseButtonEventArgs e); public event deOnClick OnClick; protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) { isMouseDown = true; base.OnMouseLeftButtonDown(e); } protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e) { if (isMouseDown) { isMouseDown = false; OnClick(this,e); } else base.OnMouseLeftButtonUp(e); } } } 而在主要頁面上可以用下面的方式將控制項加進來使用 MyCtl.nTextBlock nTxt = new MyCtl.nTextBlock();