Win CE 6.0 を実行しているデバイスにはボタンがあり、それが押された瞬間を捉える必要があります。つまり、ボタンを押すまで、メソッドが実行され、リリースされ、メソッドが停止します。問題の解決にご協力ください。
質問する
519 次
1 に答える
2
これがあなたが望むことをするためのソースコードを備えたcodeprojectへのリンクです:
http://www.codeproject.com/Articles/49881/Hooking-the-keyboard-message-queue-in-compact-fram
私は自分のWMプロジェクトでこのコードを使用して、音量キーと他のいくつかのハードウェアボタンを再利用しました(画面の向きを反転するトリガーとして、1つの画面の音量を上下に使用します)。
ここに投稿するにはコードが多すぎます。プロジェクトには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();
于 2013-01-07T00:29:09.380 に答える