別のアプリケーションにキーを送信する方法 質問する

別のアプリケーションにキーを送信する方法 質問する

特定のキー (例: k) を notepad という別のプログラムに送信したいのですが、使用したコードは次のとおりです。

private void SendKey()
{
    [DllImport ("User32.dll")]
    static extern int SetForegroundWindow(IntPtr point);

    var p = Process.GetProcessesByName("notepad")[0];
    var pointer = p.Handle;

    SetForegroundWindow(pointer);
    SendKeys.Send("k");
}
            

しかし、コードは機能しません。コードの何が問題なのでしょうか?

メモ帳をアクティブ ウィンドウにせずに、メモ帳に「K」を送信することは可能ですか? (例: アクティブ ウィンドウ = 「Google Chrome」、メモ帳はバックグラウンドにあるため、キーをバックグラウンド アプリケーションに送信することになります)?

ベストアンサー1

メモ帳がすでに起動している場合は、次のように記述する必要があります。

// import the function in your class
[DllImport ("User32.dll")]
static extern int SetForegroundWindow(IntPtr point);

//...

Process p = Process.GetProcessesByName("notepad").FirstOrDefault();
if (p != null)
{
    IntPtr h = p.MainWindowHandle;
    SetForegroundWindow(h);
    SendKeys.SendWait("k");
}

GetProcessesByNameプロセスの配列を返すので、最初のプロセスを取得するか、必要なものを見つける必要があります。

notepad開始してキーを送信する場合は、次のように記述する必要があります。

Process p = Process.Start("notepad.exe");
p.WaitForInputIdle();
IntPtr h = p.MainWindowHandle;
SetForegroundWindow(h);
SendKeys.SendWait("k");

コードが機能しない可能性がある唯一の状況は、notepadが管理者として起動され、アプリケーションが管理者として起動されていない場合です。

おすすめ記事