私はInternetExplorerの自動化に取り組んでおり、その一部にはasp 2.0でホストされ、フォームベースの認証を使用するサイトからファイルをダウンロードすることが含まれるため、エンドツーエンドの自動化を作成するためにブラウザーの自動化を使用しました。
ブラウザの[ファイルのダウンロード]ダイアログが表示されるURLをクリックできるステップに到達できました。次に、SendKeysを使用して保存ボタンをクリックしようとしましたが、役に立ちませんでした。動作していません。
これは、FindWindowメソッドを使用してファイルダウンロードダイアログのhWndポインターを取得し、setActiveWindowを使用してアクティブウィンドウにして、SendKeysコマンドが機能するようにし、SendKeysを使用してAlt+を送信しようとしたコードです。 Sしかし、それは機能しませんでした。Tab、Escape、Enterは機能しますが、[保存時にEnter]ボタンが機能しないことを確認しました。
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr SetActiveWindow(IntPtr hWnd);
private void Form1_Load(object sender, EventArgs e)
{
IntPtr hwnd = FindWindow(null, "File Download");
IntPtr nullptr = (IntPtr)0;
if (hwnd != nullptr)
{
SetActiveWindow(hwnd);
SendKeys.SendWait("%S");
}
}
同じコードを使用して、FindWindowの値を「無題-メモ帳」に変更することでメモ帳にアクセスできました。
ダイアログであり、ウィンドウであるため、別のことを行う必要がありますか?IE8を使用しています。
これは私が答えの後に試した代替コードです。
IntPtr hwnd = FindWindow(null, "File Download");
IntPtr hokBtn = IntPtr.Zero;
hokBtn = FindWindowEx(hwnd, hokBtn, "Button", IntPtr.Zero);
hokBtn = FindWindowEx(hwnd, hokBtn, "Button", IntPtr.Zero);
uint id = GetDlgCtrlID(hokBtn);
SetActiveWindow(hwnd);
IntPtr res = SendMessage(hokBtn, (int)0x00F5, 0, IntPtr.Zero);
if (res.ToInt32() == 1)
MessageBox.Show("success");
わかりやすくするために、ダイアログの画面を追加しています。
代替テキストhttp://www.freeimagehosting.net/uploads/4f23586401.png