win CE 6.0设备上的按钮

时间:2013-01-06 19:43:39

标签: c# windows compact-framework .net-2.0 windows-ce

在您的设备上运行win CE 6.0是一个按钮,您需要抓住它按下的时刻。也就是说,直到我们按下按钮,我们的方法执行,释放 - 停止方法。请帮助解决问题。

1 个答案:

答案 0 :(得分: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();

然后在你的eventHandler代码中 - 我用一个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();