Windows Mobile中GPRS連接網絡

Windows Mobile程序中如果要使用http或socket連接服務器,需要先連接網絡。可以使用ConnMgrEstablishConnectionSync函數來連接。

DWORD  dwStatus = 0;
HANDLE hConnection = NULL;

CONNMGR_CONNECTIONINFO sConInfo;
memset(&sConInfo, 0 ,sizeof(CONNMGR_CONNECTIONINFO));

sConInfo.cbSize = sizeof(CONNMGR_CONNECTIONINFO);
sConInfo.dwParams = CONNMGR_PARAM_GUIDDESTNET;
sConInfo.dwPriority = CONNMGR_PRIORITY_USERINTERACTIVE;

sConInfo.dwFlags = CONNMGR_FLAG_PROXY_HTTP
       |CONNMGR_FLAG_PROXY_WAP
       |CONNMGR_FLAG_PROXY_SOCKS4
       |CONNMGR_FLAG_PROXY_SOCKS5;

sConInfo.bExclusive  = FALSE;
sConInfo.bDisabled   = FALSE;
sConInfo.guidDestNet = IID_DestNetWAP;

ConnMgrEstablishConnectionSync(&sConInfo, &hConnection, 15000, &dwStatus);


如果知道一個接入點的名稱,則可以通過ConnMgrEnumDestinations得到相應接入點的guidDestNet。然後可以使用底層的INET接口連接HTTP了。完了嗎?沒有。還有個問題:代理服務器。我們都知道,移動的CMNET不需要代理,CMWAP則需要。接入點中可能含有代理服務器信息,而且接入類型包括HTTP、WAP、安全WAP、Socks等等,每一種都可能需要不同的代理。不要奢望ConnMgrEnumDestinations函數可以得到這麼多的東東。

事實上,微軟是提供了一個函數的,這就是傳說中的ConnMgrProviderMessage。怎麼樣,這下總該圓滿了吧?...還沒完,接着往下走。

我測的結果,在真機上,這個函數從來沒有成功過,Never。鬱悶之極。與簽名有關嗎?未可知。

正面強攻不行。打槍的不要,悄悄的進村。我們來看看手機的註冊表。在HKEY_LOCAL_MACHINE/Comm/ConnMgr項下,有詳細的接入點的信息。Destinations子項下列出了手機所有的接入點,相應的鍵值有DestId這一項。我們的目光再跳到與ConnMgr平級的Providers項,也有很多信息,其中一子項{EF097F4C-DC4B-4c98-8FF6-AEF805DC0E8E},快接近我們要的寶貝了。該項有很多子項,我們遍歷每一項,直到找到一個鍵值SrcId與我們上面說的DestId相等。看到了吧,與SrcId平級的鍵值有很多,不過我們目前需要的就那麼兩項,Type和Proxy。Type就是上面說的接入類型(HTTP、WAP、安全WAP、Socks等),而Proxy正是我們悽悽慘慘慼戚尋尋覓覓的一串字符。

以上是Windows Mobile5.0的結果。在Pocket PC2003和Smartphone2003中,HKEY_LOCAL_MACHINE/Comm/ConnMgr對應爲HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/ConnMgr。

至此,尋寶經歷告一段落。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章