メディア キー入力 ( 、 など) をアプリケーションに送信するプログラムを作成してMediaPlayPause
いMediaNextTrack
ますIntPtr
。仮想リモコンのようなもの。
そのため、調査した結果、これを見つけました。これは、問題を解決する方法をほぼ正確に示しています。
ただし、リンクに記載されているアプローチには 3 つの問題があります。
- アプリケーションをフォーカスする必要があるため、アプリケーションをフォアグラウンド ウィンドウとして設定できません。
- 彼らは、ターゲット ウィンドウをフォーカスする必要があるSendKeys関数を使用しており、問題 1 に反しています。
- 私の知る限り、SendKeysはキーボードの再生/一時停止ボタンなどのキーボード ボタンを送信できません。
最後に、何を使用する必要があるかについてかなり混乱しています(SendInput
?、SendMessage
?)。
どんな助けでも大歓迎です。
編集
受け取った回答を使用して、以下のサンプル コードをハッキングしました。
理論的には、メモ帳を見つけて「L」の文字を挿入することになっています。
ただし、メモ帳には何も表示されず、アプリケーションがクラッシュすることもありません。私が見逃している明らかなエラーはありますか?
[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
static extern IntPtr FindWindowByCaption(int ZeroOnly, string lpWindowName);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, int wParam, IntPtr lParam);
const int WM_KEYDOWN = 0x100;
//const int WM_KEYUP = 0x101;
const int L_KEY = 0x4C;
private void button1_Click(object sender, EventArgs e)
{
IntPtr ip = FindWindowByCaption(0, "Untitled - Notepad");
SendMessage(ip, WM_KEYDOWN, L_KEY, IntPtr.Zero);
//SendMessage(ip, WM_KEYUP, L_KEY, IntPtr.Zero);
}