2013-01-06 40 views
1

在運行win CE 6.0的設備上有一個按鈕,您需要捕捉它按下的時刻。也就是說,直到我們按下按鈕,我們的方法才執行,釋放 - 停止方法。請幫助解決問題。win CE 6.0設備上的按鈕

+0

什麼樣的 「按鈕」 的?硬件還是軟件? – ctacke

+0

硬件按鈕 – user1514422

+0

然後它非常依賴硬件。這究竟是什麼硬件? – ctacke

回答

2

這裏是源代碼到CodeProject做你想要的東西的鏈接:

http://www.codeproject.com/Articles/49881/Hooking-the-keyboard-message-queue-in-compact-fram

我在我自己的WM項目成功地使用此代碼來重新利用音量鍵和一些其他的硬件按鈕(我在一個屏幕上使用音量上/下作爲觸發器來翻轉屏幕方向)。

有太多的代碼要在這裏發佈。該項目是這似乎是所有可用的鑰匙全面上市vkmap.cs:

public static vkMap[] vkValues = { 
      new vkMap (0x00, "VK_NOTDEF"), 
      new vkMap (0x01, "VK_LBUTTON"), 
      new vkMap (0x02,"VK_RBUTTON"), 
      new vkMap (0x03,"VK_CANCEL"), 
... 
      new vkMap (0x30,"VK_0"), 
      new vkMap (0x31,"VK_1"), 
... 
      new vkMap (0x41,"VK_A"), 
... 
      new vkMap (0xA6,"VK_BROWSER_BACK"), 
      new vkMap (0xA7,"VK_BROWSER_FORWARD"), 
      new vkMap (0xA8,"VK_BROWSER_REFRESH"), 

等..所有的一切有些258個鍵,但有些被標記爲未定義。如你所願

HookKeys hook = new HookKeys(); 
hook.HookEvent += new HookKeys.HookEventHandler(HookEvent); 
hook.Start(); 

然後在你的事件處理程序的代碼 - 我用switch語句來找到我想要的鍵:

使用代碼

 switch (vkMap.vkValues[keyBoardInfo.vkCode].s) 
     { 
      case "VK_F6": 
       if ((hookArgs.wParam.ToInt32() == WM_KEYDOWN) || (hookArgs.wParam.ToInt32() == WM_SYSKEYDOWN)) 
       // Code here 
       break; 
      case "VK_F7": 
       if ((hookArgs.wParam.ToInt32() == WM_KEYDOWN) || (hookArgs.wParam.ToInt32() == WM_SYSKEYDOWN)) 
       // Code here 
       break; 
      default: 
       break; 
     } 

我不記得爲什麼我也在檢查WM_KEYDOWN和WM_SYSKEYDOWN ..對此抱歉,如果我記得我會發佈一個編輯。

當你完成需要輸入:

hook.Stop(); 
+1

這可能會或可能不會工作,具體取決於OEM如何映射按鈕。如果它被映射爲鍵盤按鈕,那麼這將起作用。如果它不是鍵盤按鈕(並且我已經看到許多帶有不是按鈕的CE設備),那麼這將不起作用。 – ctacke

+0

同意,但仍然是一個很好的代碼示例引用,我沒有見過+1的 – tcarvin