私は何日も解決しようとしてきた問題を抱えていますが、うまくいきません!
私の Windows フォーム アプリケーションには、グリッドがあります。1 つの列には電子メール アドレスが含まれます。ユーザーがこの列をダブルクリックしたときに、Outlook オートメーションを介して新しい電子メール ウィンドウを開きたいと考えています。このウィンドウにはフォーカスがあり、ユーザーがすぐに入力できるようにする必要があります。
次の場合、すべてが正常に機能します。
- Visual Studio からアプリを実行しています。
- または、私のアプリにフォーカスがあります。
ただし、.exe を実行し、列をダブルクリックしたときに Outlook にフォーカスがあると、次のようになります。
- 新しいメールウィンドウが期待どおりに開きます
- 新着メールウィンドウでカーソルが点滅する(予想通り)
- ユーザーが入力を開始すると、カーソルは引き続き Outlook で点滅しますが、入力したテキストは Outlook ではなくアプリケーションのグリッドに表示されます。
テキストボックスがある単純なフォームで問題を再現できました。
次のコードを使用します。
private void textBox1_MouseDoubleClick(object sender, MouseEventArgs e)
{
OpenOutlookMail(textBox1.Text);
}
private void OpenOutlookMail(string to)
{
MailItem item = OutlookApp.CreateItem(OlItemType.olMailItem) as MailItem;
item.To = to;
item.Subject = string.Empty;
item.Body = string.Empty;
item.Display();
}
protected Application OutlookApp
{
get
{
if (mOutlookApp == null)
{
mOutlookApp = new Application();
}
return mOutlookApp;
}
}
私がすでに試したことは
- OpenOutlookMail を呼び出す前に、this.Activate() を介して現在のフォームをアクティブ化します。
- MailItem Inspector オブジェクトをアクティブ化する
- オートメーションを介して Outlook の ActiveWindow と ActiveExplorer をアクティブ化する
- ここで説明されている AutoIt の使用MSDN フォーラムの MS Word に関する同様の問題
どんな助けでも大歓迎です!