none
如何用 C# 寫一個在 Mobile 手機上, 可以知道按下某一個硬體按鍵? RRS feed

  • 問題

  • 各位先進,

    我想用 C# 寫一個在 Mobile 6.0 手機上執行的程式, 可以知道目前是按下了手機上任何一個硬體按鍵!

    想找這方面的資料, 不知道要到哪裡找? 是否有這方面的 sample code ?

    請各位先進給我指教, 謝謝 !

     

    2009年2月2日 下午 02:33

解答

  • HI,

    Windows Mobile 6有提供一個偵測使用者是否按下Back鍵的範例, 您可以看看有沒有幫助, 其位置如下:

    C:\Program Files\Windows Mobile 6 SDK\Samples\Smartphone\cpp\Win32\back

     

    tihs

    2009年2月3日 上午 03:59
  • 這一類的需求 可能還是要靠 SetWindowsHookEx 這一類的 API 來做

    Search 一下 MSDN 應該可以得到一些東西 比如說以下這篇    
    http://social.msdn.microsoft.com/Forums/en-US/netfxcompact/thread/76bd9559-d4fa-4ef5-af0c-1aa506389675/

    但這也不是萬能的, 因為畢竟這是從 GWES 的 level 取得 hook (keybd_event), 有些 hardware key 假如是在 driver 做掉那也沒辦法 detect 到

    不過 以 Keypad Driver and OS 的角度而言, 大部份的 Key 都會以 VK key 型態送給 OS
    但有些情況會有些例外

    1) 有些特別的 key 不一定會送出 VK code, 比如說 power key, 或是某些 H/W function key (直接在 driver 裡做掉的功能)
    2) 或是一些 qwerty keypad 的 device 上, 可能會按了 Fn Key 再加上原來的 key 就會變成其它 key, 有點像是 Shift Key, 只是這些 key 轉換很可能都在 driver 理做掉, 所以對 OS or App 而言完全不會知道 按下 Fn key or 進入到 Fn mode.
    3) 其它的 software, driver 也有可能利用 keybd_event 來 insert key press event, 這也會一起流到 Keyboard Hook 裡

    以上這幾種情況都沒有辦法讓 app 可以取得真正的 H/W key 到底被按下沒.
    有些需要 依靠 system notification API 來取得這些 info, 而有些甚至要看看 keyboard driver 有沒有留啥 back channel 可以用, 但這些就是很 case by case, 沒有一定的標準了.

    2009年2月3日 下午 12:12

所有回覆

  • HI,

    Windows Mobile 6有提供一個偵測使用者是否按下Back鍵的範例, 您可以看看有沒有幫助, 其位置如下:

    C:\Program Files\Windows Mobile 6 SDK\Samples\Smartphone\cpp\Win32\back

     

    tihs

    2009年2月3日 上午 03:59
  • 這一類的需求 可能還是要靠 SetWindowsHookEx 這一類的 API 來做

    Search 一下 MSDN 應該可以得到一些東西 比如說以下這篇    
    http://social.msdn.microsoft.com/Forums/en-US/netfxcompact/thread/76bd9559-d4fa-4ef5-af0c-1aa506389675/

    但這也不是萬能的, 因為畢竟這是從 GWES 的 level 取得 hook (keybd_event), 有些 hardware key 假如是在 driver 做掉那也沒辦法 detect 到

    不過 以 Keypad Driver and OS 的角度而言, 大部份的 Key 都會以 VK key 型態送給 OS
    但有些情況會有些例外

    1) 有些特別的 key 不一定會送出 VK code, 比如說 power key, 或是某些 H/W function key (直接在 driver 裡做掉的功能)
    2) 或是一些 qwerty keypad 的 device 上, 可能會按了 Fn Key 再加上原來的 key 就會變成其它 key, 有點像是 Shift Key, 只是這些 key 轉換很可能都在 driver 理做掉, 所以對 OS or App 而言完全不會知道 按下 Fn key or 進入到 Fn mode.
    3) 其它的 software, driver 也有可能利用 keybd_event 來 insert key press event, 這也會一起流到 Keyboard Hook 裡

    以上這幾種情況都沒有辦法讓 app 可以取得真正的 H/W key 到底被按下沒.
    有些需要 依靠 system notification API 來取得這些 info, 而有些甚至要看看 keyboard driver 有沒有留啥 back channel 可以用, 但這些就是很 case by case, 沒有一定的標準了.

    2009年2月3日 下午 12:12
  • 我不是很確定你想要做到什麼程度,有試過hardwarebutton這個類別了嗎?
    http://msdn.microsoft.com/zh-tw/library/microsoft.windowsce.forms.hardwarebutton.aspx
    態度決定一切 ! - blog : http://bauann-makeit.blogspot.com/
    2009年2月3日 下午 01:12
    版主