none
關於無線裝置的狀態取得 RRS feed

  • 問題

  • 最近看到 -KYLIN- 以及 ellen jocobs 兩位先進的講解稍微的實做了相關的程式但是卻有一些問題我找不到解決的方法

    1.若是單純要開啟或關閉 Phone WIFI BT 等等無線裝置可直接作開關動作但是該如何取得無線裝置的目前狀態呢?

    2.ellen jocobs 兄有說到可以用 ChangeRadioState 來改變 BT, WLAN and BaseBand Power state
    我也看了一下那個網頁不過有看沒有懂 @@ ellen jocobs 兄不知道哪裡有範例可以實作一下呢

    2009年4月21日 上午 05:41

解答

  • 有 SetDevicePower 就會有 GetDevicePower http://msdn.microsoft.com/en-us/library/aa930541.aspx , 但這只能取得 WiFi。 其它的就要用 GetWirelessDevices 不過這也是在 WM 上才有。 假如是 CE 那就要用 BT and RIL API 來取的 power state。

    另外 GetWirelessDevices , ChangeRadioState 只有在 WM 上才有, 假如你有 WM AKU 的 OEM document search 一下 這個 API 就會看到 sample code。
    另一個選擇就是 這邊有人包了一個 wrapper class, 也可以參考看看 http://forum.xda-developers.com/showthread.php?t=413159


    如果你覺得我的文章以確切回答到問題, 請不吝標示為有用 and 解答.
    • 已提議為解答 JocoboNY 2009年4月23日 下午 03:08
    • 已取消提議為解答 LeonChen 2009年4月30日 上午 01:37
    • 已標示為解答 LeonChen 2009年5月4日 上午 04:59
    2009年4月22日 上午 05:45

所有回覆

  • 得到狀態..
    hr = GetWirelessDevices(&pDevice, 0);
     while (pDevice)
                {
                    switch (pDevice->DeviceType)
                    {
                        case POWER_BLUETOOTH:
                        case POWER_PHONE:
                     }
                 }      

    更改藍牙狀態
       ChangeRadioState (pDevice,2,POWER_PRE_SAVE)//開成discoveravle

    2009年4月22日 上午 02:17
  • 有 SetDevicePower 就會有 GetDevicePower http://msdn.microsoft.com/en-us/library/aa930541.aspx , 但這只能取得 WiFi。 其它的就要用 GetWirelessDevices 不過這也是在 WM 上才有。 假如是 CE 那就要用 BT and RIL API 來取的 power state。

    另外 GetWirelessDevices , ChangeRadioState 只有在 WM 上才有, 假如你有 WM AKU 的 OEM document search 一下 這個 API 就會看到 sample code。
    另一個選擇就是 這邊有人包了一個 wrapper class, 也可以參考看看 http://forum.xda-developers.com/showthread.php?t=413159


    如果你覺得我的文章以確切回答到問題, 請不吝標示為有用 and 解答.
    • 已提議為解答 JocoboNY 2009年4月23日 下午 03:08
    • 已取消提議為解答 LeonChen 2009年4月30日 上午 01:37
    • 已標示為解答 LeonChen 2009年5月4日 上午 04:59
    2009年4月22日 上午 05:45
  • 感謝各位先進的指導 小弟最近比較忙到了今天才有空實作
    關於無線裝置的狀態取得我直接用 SystenStatus 來取得雖然只有在 WM 上有用不過已經足夠我使用了

    想再請教 ellen jocobs 兄在主控台應用程式裡不能使用 Application.DoEvents() 這個函數應該改用甚麼呢?
    2009年5月4日 上午 05:08
  • 感謝各位先進的指導 小弟最近比較忙到了今天才有空實作
    關於無線裝置的狀態取得我直接用 SystenStatus 來取得雖然只有在 WM 上有用不過已經足夠我使用了

    想再請教 ellen jocobs 兄在主控台應用程式裡不能使用 Application.DoEvents() 這個函數應該改用甚麼呢?

    Hi, Leon
    這個有點離題了,建議你新開一個討論串來討論相關問題。
    另外Application.Doevents()是個很有趣的東西,你主要是想拿來來做甚麼呢?一般winform程式有時候是拿來更新UI或是觸發事件,但主控台應用程式感覺用不太到哩..
    態度決定一切 ! - blog : http://bauann-makeit.blogspot.com/
    2009年5月4日 下午 05:10
    版主
  • bauann 兄 謝謝您的建議 ^^
    我下午查了一下這個函數原是用來更新畫面或觸發螢幕事件的
    原意是因為我要用主控台模式實作 WIFI 啟動旦發現 APPLICATION
    在主控台模式是沒有的所以才問了一下 (主控台模式沒 UI 怎麼用 哈)

    突然想到要更改螢幕亮度可否改登錄檔後再用這個觸發畫面事件呢??
    (完全偷吃步 哈)

    *********************** 我是題外話 *************************

    剛剛恍神一看 bauann 兄 ==> MVP 版主 ==> 驚到 ==>以後會變 MCG 嗎 哈
    2009年5月4日 下午 05:20
  • 哈~又被你發現了..XD 低調...低調..

    回到正題,亮度部分這邊有些參考資料可以參考
    http://social.msdn.microsoft.com/Search/en-US/?Refinement=112&query=brightness&rq=meta:Search.MSForums.GroupID(01328876-91a4-41ba-861c-7cdd44d922f5)&rn=All+Smart+Device+Development+Forums

    而Doevents的部分主要是處理訊息駐列裡面的事件,不是觸發銀幕事件喔,比如果你用一個Do...Loop迴圈,離開迴圈的條件是用timer觸發,這個情況下,如果Do..loop迴圈裡面沒有加上application.doevents,那麼 timer事件就不會處理了,因為你的CPU一直處在"沒空"的狀態,而有application.doevents的話CPU就會去看看有沒有其他事情要做的。而反過來看,你的 Doevents從Do迴圈跳出去之後什麼時候CPU控制權會回到你手上,這個是控制不到的,看系統情況,還有其他事件花費多少時間處理。
    態度決定一切 ! - blog : http://bauann-makeit.blogspot.com/
    2009年5月5日 上午 02:14
    版主