2016-05-28 5 views
-1

私は最終的にユーザー指定のキー(車載プロジェクトの一部)を含む一種のドッキングスクリーンキーボードになるアプリケーションを構築しています。keybd_eventを使用して特定のキーを送信することはできませんか?

これまでのところは良い、私はP/Windowsの、印刷画面を含むほとんどのキーのためにうまくkeybd_eventを呼び出すことができる、など

問題:そのようVK_LAUNCH_MEDIA_SELECTとVK_LAUNCH_APP1などの特定のキーがまったく機能していません。

私は他のキーと同じ呼び出しを使用しています。なぜ、これらの "特別な"キーだけでWindowsがうまくいかないのですか?

詳しい説明:私はキー押しを捕まえようとはしていません、私はそれらを送信しています。

NativeMethods.keybd_event(this.Settings.vKey, 0, 0 | NativeMethods.KEYEVENTF_EXTENDEDKEY, (IntPtr)0); 
NativeMethods.keybd_event(this.Settings.vKey, 0, NativeMethods.KEYEVENTF_KEYUP | NativeMethods.KEYEVENTF_EXTENDEDKEY, (IntPtr)0); 

ここで、vKeyは、VK_LAUNCH_APP1 (0xB6)のような仮想キーコードの文字です。私はEXTENDEDKEYが本当に必要かどうか分からないのは、これらの特定のキーが「拡張」(すなわち右 - 右、右シフトなど)と考えられていないからだと思う。

VK_LAUNCH_APP1(Windows 10) 「ベンダー提供のプログラム」は存在していなくてもかまいません(Windows以外)。同様に、VK_LAUNCH_MEDIA_SELECT (0xB5)は、Windows Media Player(または、設定コントロールパネルで設定したメディアプレーヤー)を開きます。

+0

私はC#のような人ではありませんが、キーボードイベントを扱う既存のコードを投稿すると、C#を理解している人にとっては便利かもしれません。 :) –

+0

あなたは 'keybd_event'関数をどこで呼び出すべきですか?そして、この機能が時代遅れであると言う[ドキュメント](https://msdn.microsoft.com/en-us/library/windows/desktop/ms646304.aspx)の大きなバナーを見ずに、どうやってその使い方を始めましたか?代わりに常に 'SendInput'を使うべきですか?特にあなたを選ぶことを意味するわけではありませんが、あなたは私が見る唯一のものとはまったく離れています。実際には、実際には、キーボードイベントの合成に関する質問をしている人は混乱するほど多くの人がいますが、同じ廃止された関数を使うことをお勧めします。 –

+0

@CodyGrayの大部分は「うまくいく」ため、「プッシュボタン、リリースボタン」よりも何もする必要はないからです。 SendInputはすべて「キューを作って物事をロックしようとしていますが、ここではこれのための構造体があり、構造体を使用しないでください。マウスのこともできるのですか?古い機能で覆われています!" – Tsaukpaetra

答えて

0

は、次のコードを使用してください:あなたは確かにこれらのキーを送信することができます

keybd_event(VK_LAUNCH_MEDIA_SELECT, 0, 0, 0); 
keybd_event(VK_LAUNCH_MEDIA_SELECT, 0, KEYEVENTF_KEYUP, 0); 
1

を誰もが彼らのために聞いていないので、ちょうどそれが何をする可能性が非常に高いではありません。まずあなたのキーボードを見て、 "Launch"のようなキャプションを持つ専用のボタンが必要です。ごくまれに、利用可能な場合は、少なくとも「再生」と「停止」ボタンがあります。通常、ラップトップでのみ使用可能で、通常のキーボードキーとは別に設定し、ファンクションキーの上に配置します。ファンクションキーにオーバーレイされている場合は、最初にFnキーを押す必要があります。

これらのキーを持っていた私が見た種類のマシンは、ソニーのVAIOラップトップでした。利用可能な場合は、キーを構成するベンダー提供のアプレットを最初に実行し、キーを押したときに実行されるプログラムを正確に判断する必要があります。

ログイン時にアクティブ化された別のベンダー提供のプログラムは、これらのキーを認識してアクションを実装します。これには、HSHELL_APPCOMMAND通知に注意して、WH_SHELLのSetWindowsHookEx()を使用してWindowsフックを記述する必要があります。 C#でできることではありません。

+0

私は"ベンダー固有の "キーを送信していません。これらはWindowsに組み込まれていて、実際にはうまく処理されています(実際にはMicrosoftキーボードとマウスを含む特別なプログラムなしで動作するMicrosoftキーボードを使用してセンターBS) – Tsaukpaetra

+0

http://stackoverflow.com/a/21504831/17034 –

+0

私は必ずしも管理者として実行されているプログラムについては言及していませんし、管理者として実行しているものにはキーを送信しません他のキー(ミュート、ボリュームアップ、Windowsなど)はできませんでした。 – Tsaukpaetra

関連する問題