Delphi中點選網頁彈出的Alert對話方塊的確定按鈕

一劍平江湖發表於2013-12-10

       實現的方法有很多,一般都是使用Windows API函式遍歷視窗,查詢指定標題的視窗,然後從該視窗查詢確定按鈕,向該按鈕傳送滑鼠訊息進行模擬點選。由於IE8由Alert彈出的網頁對話方塊的標題是“來自網頁的訊息”,而IE6由Alert彈出的網頁對話方塊的標題是“Microsoft Internet Explorer”,所以本文沒有按查詢視窗標題方法獲取視窗控制程式碼。注意到不管IE哪個版本,IE視窗的類名都是“IEFrame”,而網頁對話方塊的父視窗是IE視窗,所以本文是根據父視窗的類名是不是IEFrame來判斷視窗是不是網頁對話方塊,以下程式碼點選網頁彈出的Alert對話方塊和Confirm對話方塊的“確定”按鈕,並用Label1控制元件顯示網頁對話方塊的訊息內容:

procedure TForm1.Button1Click(Sender: TObject);
var
  hIE, hDlg, hBtn, hStatic:HWND;
  Text: array[0..255of char;
begin
  hDlg := GetWindow(Handle, GW_HWNDFIRST);
  While hDlg <> 0 do
  begin

    hIE := GetParent(hDlg);
    if GetClassName(hIE, Text, 255) > 0 then  //獲取父視窗類名
      if Text = 'IEFrame' then //父視窗為IE視窗
       begin
         hBtn := FindWindowEx(hDlg, 0nil'確定'); //檢視確定按鈕
         if hBtn <> 0 then
         begin

           hStatic := FindWindowEx(hDlg, 0'Static'nil);
           hStatic := FindWindowEx(hDlg, hStatic, 'Static'nil);
           if GetWindowText(hStatic, Text, 255) > 0 then
             Label1.Caption := Text;
           Sleep(100);
           SendMessage(hBtn, $00F500); //第一次點選使確定按鈕獲取焦點
           Sleep(100);
           SendMessage(hBtn, $00F500); //第二次點選擊中確定按鈕
         end;
       end;
    hDlg:=GetWindow(hDlg,GW_HWNDNEXT);
  end;
end;

相關文章