特定のキー(kなど)をnotepadという名前の別のプログラムに送信したいのですが、使用したコードは次のとおりです。
void sendkey ()
{
[DllImport ("User32.dll")]
static extern int SetForegroundWindow(IntPtr point);
Process p = Process.GetProcessesByName("notepad")[0];
IntPtr pointer = p.Handle;
SetForegroundWindow(pointer);
SendKeys.Send("k");
}
しかし、コードは機能しません。コードの何が問題になっていますか?
編集済み:アクティブなウィンドウにするために、メモ帳なしでメモ帳に「K」を送信することは可能ですか? (例:アクティブウィンドウ=「Googleクロム」、メモ帳は背景にあります。これは、バックグラウンドアプリケーションにキーを送信することを意味します)
メモ帳が既に起動している場合は、次のように記述する必要があります。
// 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
が管理者として起動され、アプリケーションが起動されない場合です。