特定のキー (例: 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
が管理者として起動され、アプリケーションが管理者として起動されていない場合です。