5

最新のキーボードには、「一時停止/再生」や「Web ブラウザを開く」などの特別なマルチメディア キーがあります。これらのキーを「押す」プログラムを書くことは可能ですか?

私は C でのソリューションを好みますが、言語に依存しないソリューションも受け入れます。

4

2 に答える 2

9

Win32 でのプログラミングについて話している場合は、SendInput Windows API を使用してください。

type メンバーを INPUT_KEYBOARD に設定して、INPUT 構造体を作成する必要があります。ki メンバー (KEYBDINPUT タイプ) では、vk (仮想キー) を目的の VK コード (たとえば、VK_MEDIA_NEXT_TRACK、VK_MEDIA_STOP) に設定できます。

仮想キー コード: http://msdn.microsoft.com/en-us/library/dd375731(v=VS.85).aspx

SendInput 関数: http://msdn.microsoft.com/en-us/library/ms646310(v=VS.85).aspx

私は以下をテストしていませんが、次のようにする必要があります。

KEYBDINPUT kbi;
kbi.wVk = VK_MEDIA_STOP; // Provide your own
kbi.wScan = 0;
kbi.dwFlags = 0;  // See docs for flags (mm keys may need Extended key flag)
kbi.time = 0;
kbi.dwExtraInfo = (ULONG_PTR) GetMessageExtraInfo();

INPUT input;
input.type = INPUT_KEYBOARD;
input.ki   = kbi;

SendInput(1, &input, sizeof(INPUT));
于 2010-06-03T19:32:36.367 に答える
6

受け入れられた答えよりもさらに簡単なのはkeybd_eventです。No は、数値パラメーターを使用した呼び出しのみを構造化します。

// C# example:
public const int KEYEVENTF_EXTENDEDKEY = 1;
public const int KEYEVENTF_KEYUP = 2;
public const int VK_MEDIA_NEXT_TRACK = 0xB0;
public const int VK_MEDIA_PLAY_PAUSE = 0xB3;
public const int VK_MEDIA_PREV_TRACK = 0xB1;

[DllImport("user32.dll", SetLastError = true)]
public static extern void keybd_event(byte virtualKey, byte scanCode, uint flags, IntPtr extraInfo);

keybd_event(VK_MEDIA_PREV_TRACK, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
于 2014-01-20T14:01:10.560 に答える