マルチメディアキープレスをシミュレートする方法(c)?
質問
最新のキーボードには、「Pause/Play」または「Open Webブラウザー」など、特別なマルチメディアキーがあります。これらのキーを「押す」プログラムを書くことは可能ですか?
私はCで解決策を好むでしょうが、言語不可知論の解決策も受け入れます。
解決
Win32の下でのプログラミングについて話している場合は、SendInput Windows APIを使用してください。
入力構造を構築し、型メンバーをinput_keyboardに設定する必要があります。 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));
他のヒント
受け入れられている答えよりもさらに簡単です keybd_event. 数値パラメーターを備えた単なるコールはありません。
// 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);
所属していません StackOverflow