編集:ああ。問題のウィンドウを「所有」していないことを見逃しました。したがって、以下のコードは機能しません。あなたはあなたがしていることをし続ける必要があります。すべてのsendkeysの前にいつでもSetForegroundWindowを呼び出すことができます。
SendKeysを使用するクラスに、問題のフォームからのアクティブ化イベントと非アクティブ化イベントをフックさせます。
internal class SendKeysClass
{
private bool _canSend;
public SendKeysClass(Form form)
{
form.Activated += (sender, args) => _canSend = true;
form.Deactivate += (sender, args) => _canSend = false;
}
public void Send(string keys)
{
if (!_canSend)
return;
SendKeys.Send(keys);
}
}
または、.Net 3.5 / C#3.0を使用していない場合:
internal class SendKeysClass
{
private bool _canSend;
public SendKeysClass(Form form)
{
form.Activated += OnActivated;
form.Deactivate += OnDeactivated;
}
private void OnDeactivated(object sender, EventArgs e)
{
_canSend = false;
}
private void OnActivated(object sender, EventArgs e)
{
_canSend = true;
}
public void Send(string keys)
{
if (!_canSend)
return;
SendKeys.Send(keys);
}
}