36

特定のキー (k など) をメモ帳という名前の別のプログラムに送信したいのですが、使用したコードは次のとおりです。

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"、メモ帳はバックグラウンドにあり、バックグラウンド アプリケーションにキーを送信することを意味します)?

4

3 に答える 3

65

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

// 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が管理者として起動され、アプリケーションが機能しない場合です。

于 2013-03-08T11:01:13.643 に答える