Редактировать: Ооо. Я упустил, что вы не «владеете» рассматриваемым окном. Поэтому приведенный ниже код не будет работать. Вы должны продолжать делать то, что вы делаете. Вы всегда можете вызвать SetForegroundWindow перед каждым sendkeys.
Позвольте классу, использующему SendKeys, перехватывать события Activated и Deactivation из рассматриваемой формы.
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);
}
}