C#で書いています。
プログラムに組み込まれたサードパーティ アプリケーションを起動するプロセスがあります。また、テキストを書き込む RichTextBox もあり、埋め込みアプリケーションにリアルタイムで表示されます。すべてが機能しますが、マウスを動かす必要があります。アプリケーションがフォーカスを取得し、更新して変更を表示するためです。
これはプロセスです:
private void button2_Click(object sender, EventArgs e)
{
System.IO.File.WriteAllText(@"ForParsing.txt", textBox1.Text);
pdf.StartInfo.FileName = @"yap.exe";
pdf.StartInfo.Arguments = "ForParsing.dvi";
pdf.Start();
pdf.WaitForInputIdle(-1);
SetParent(pdf.MainWindowHandle, this.splitContainer2.Panel1.Handle);
SetWindowPos(pdf.MainWindowHandle, HWND_TOP,
this.splitContainer2.Panel1.ClientRectangle.Left,
this.splitContainer2.Panel1.ClientRectangle.Top,
this.splitContainer2.Panel1.ClientRectangle.Width,
this.splitContainer2.Panel1.ClientRectangle.Height,
SWP_NOACTIVATE | SWP_SHOWWINDOW);
}
下に TextBox のキー押下ハンドラーがあります。キーが押されると、プログラムに組み込まれているサードパーティのアプリケーションにフォーカスします。
private void richTextBox1_TextChanged(object sender, EventArgs e)
{
System.IO.File.WriteAllText(@"ForParsing.txt", textBox1.Text);
//Focus on third party application
SetForegroundWindow(pdf.MainWindowHandle);
}
ここまでは順調ですね。ここでの問題: コースサーが TextBox にあったのと同じ場所にフォーカスを即座に戻したい。組み込みアプリケーションのリアルタイム更新以外は何も起こらなかったように、TextBox に書き込みを続けられるようにしたいと考えています。
簡単に言えば、サードパーティのアプリケーションが即座にリフレッシュ (フォーカスを得る) する必要があり、TextBox で停止した現在の位置で干渉なく入力できるようにする必要があります。
そうすることは可能ですか?これに対するより良い、より簡単な解決策はありますか? どんなアドバイスにも喜んで耳を傾けます。
自分の質問には答えられないので、ここに書きます。
人々の問題をいじくり回して解決策を見つけた
これが私がやったことです:
private void richTextBox1_TextChanged(object sender, EventArgs e) { System.IO.File.WriteAllText(@"ForParsing.txt", textBox1.Text);
//Focus on third party application
SetForegroundWindow(pdf.MainWindowHandle);
//Restore focus
pdf.WaitForInputIdle();
SetForegroundWindow(this.Handle);
this.Focus();
}
みんな助けてくれてありがとう