私のアプリケーションでは、Outlook 2010にフォーカスを合わせて、CTRL-N(新しい電子メール)を送信しようとしています。どのようにOutlookにフォーカスを合わせ、C#でキーストロークを送信しますか?
私はShowWindow、FindWindow、SetFocus、SetForegroundWindow、SendMessageの多くの異なる繰り返しを試しましたが、いずれも動作するように見えません。
それは...私のコードは、メモ帳のためではなく、Outlookの正常に動作します:
using System.Runtime.InteropServices;
using System.Diagnostics;
const int kKeyDown = 0x0100;
const int kKeyUp = 0x0101;
const int kCtrl = 0x11;
const int kN = 0x4e;
Process[] prcOutlook = System.Diagnostics.Process.GetProcesses();
foreach (System.Diagnostics.Process prcTempProc in prcOutlook)
{
if (prcTempProc.ProcessName == "OUTLOOK")
{
IntPtr windowToFind = prcTempProc.MainWindowHandle;
if (ShowWindow(windowToFind, 1))
{
SetFocus(wHndle);
int result = SendMessage(windowToFind, kKeyDown, kCtrl, 0);
result = SendMessage(windowToFind, kKeyDown, kN, 0);
result = SendMessage(windowToFind, kKeyUp, kCtrl, 0);
result = SendMessage(windowToFind, kKeyUp, kN, 0);
}
}
}
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
コードが正常に動作、それはキーストロークを取得するために集中するOutlookをもたらさないだけで決して...
どこが間違っていますか?
よろしく、 ディーン
あなたは、ウイルスのいくつかの並べ替えを書いていますか? – BoltBait
私はこのコードがうまくいかないかもしれないという私の頭の上から5つの理由を考えることができます。したがって、その他の理由から、これは実際に.NETアプリケーションから電子メールを送信する最良の方法ではありません。 'System.Net.Mail'名前空間を調査し、より良い選択肢が見つからないかどうか確認してください。 –
私は実際に電子メールを送信したくない、単に新しい電子メールウィンドウを開く。私はいくつかの音声認識のものに取り組んでいますし、アプリケーションが他の多くのことをやりたい、新しい電子メールウィンドウを開くことは一つの例にすぎません。 –