看到Yonsm兄寫的“Windows Mobile 中開關 WIFI 的“通用”代碼”一文。
原文地址:http://www.yonsm.net/read.php?412
在我機器(586W 6.1)測試無效,研究後發現Yonsm兄的演算法並不通用,至少在我機器上無效。
其實問題在於擷取WIFI適配器的名稱上。
搜尋了遍註冊表,終於找到瞭解決辦法。
HKEY_LOCAL_MACHINE / System / CurrentControlSet / Control / POWER /
State / {98C5250D-C29A-4985-AE5F-AFE5367E5006}\<DEVICE_NAME>
其中<DEVICE_NAME>就是適配器的名稱。
註:{98C5250D-C29A-4985-AE5F-AFE5367E5006}\<DEVICE_NAME>是鍵的名稱,不是子父路徑的關係。
將這個鍵的名稱直接傳給SetDevicePower的pvDevice參數即可。
附:C#實現代碼!
string[] sNames = null;
RegistryKey keyWlan = null;
try
{
keyWlan = Registry.LocalMachine.OpenSubKey(@"System\CurrentControlSet\Control\Power\State");
sNames = keyWlan.GetValueNames();
}
catch { }
finally
{
if (keyWlan != null) keyWlan.Close();
}
foreach (string wl in sNames)
{
if (wl.StartsWith("{98C5250D-C29A-4985-AE5F-AFE5367E5006}\\"))
{
//POWER_NAME = 0x00000001
SetDevicePower(wl, 0x00000001, open ? DevicePowerState.D0 : DevicePowerState.D4);
break;
}
}