TWebBrowser Alert Mesajları
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
TWebBrowser Alert Mesajları
Merhaba değerli üyeler ,
TWebBrowser ile açtığım bir sitede bazı durumlarda ekrana JS de alert deyimi kullanılarak açılmış mesaj kutuları geliyor, bu durumu anlayıp ilgili mesaja "TAMAM" tuşunu nasıl tıklarım.
İyi çalışmalar.
TWebBrowser ile açtığım bir sitede bazı durumlarda ekrana JS de alert deyimi kullanılarak açılmış mesaj kutuları geliyor, bu durumu anlayıp ilgili mesaja "TAMAM" tuşunu nasıl tıklarım.
İyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
Re: TWebBrowser Alert Mesajları
Burada Timer kullanarak periyodik olarak kontrol etmiş. Çok da profesyonel bir çözüm gibi gözükmüyor.
Burada ise alarm mesajının açılmasını engellemeyi göstermiş.
Burada ise alarm mesajının açılmasını engellemeyi göstermiş.
There's no place like 127.0.0.1
Re: TWebBrowser Alert Mesajları
@SimaWB cevabın için teşekkür ederim, ilk yöntem ekrana mesajın çıktığını anlayıp kapatmak için işe yarıyor fakat , sorumda belirtmemişim mesajın içinde yazan bilgiyide okumanın bir yolu mümkün olabilir mi?
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
Re: TWebBrowser Alert Mesajları
Biraz uğraştırdı ama oldu sanırım
Kod: Tümünü seç
function FindControlByNumber(hApp: HWND; ControlClassName: string; ControlNr: Word = 1): HWND;
var
i: Word;
hControl: HWND;
begin
Result := 0;
if IsWindow(hApp) then
begin
Dec(ControlNr);
hControl := 0;
for i := 0 to ControlNr do
begin
hControl := FindWindowEx(hApp, hControl, PChar(ControlClassName), nil);
if hControl = 0 then
Exit;
end;
end;
Result := hControl;
end;
procedure TForm3.Timer1Timer(Sender: TObject);
const
TargetCaption = 'Web sayfasından ileti';
var
S: string;
len: integer;
hLable: HWND;
begin
SetLength(S, 127);
len := GetWindowText(GetForegroundWindow, PChar(S), 127);
if len = 0 then Exit;
SetLength(S, len);
if S = TargetCaption then
begin
hLable := FindControlByNumber(GetForegroundWindow, 'Static', 2);//JS alertin mesaj içeriğinin class'ı Static ve 2. sırada.
if hLable <> 0 then
begin
len := GetWindowText(hLable, PChar(S), 127);
SetLength(S, len);
Caption := S; //S alert box'ın mesaj içeriği
end;
Timer1.Enabled := False;
end;
end;
There's no place like 127.0.0.1
Re: TWebBrowser Alert Mesajları
@SimaWb emeğine sağlık ,
sorunsuz bir şekilde çalışıyor, alert in içeriğini alabilir.
Teşekkür ederim.
sorunsuz bir şekilde çalışıyor, alert in içeriğini alabilir.
Teşekkür ederim.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
Re: TWebBrowser Alert Mesajları
Peki şöyle bir şeye daha ihtiyaç doğdu ,
şimdi yukarıdaki örnekte aktif pencerenin caption u okunup içine ulaşılıyor, o an bir şekilde başka bir uygulama penceresi aktif olursa kod çalışmıyor, bu kodun aktif olmasada dahi benim uygulamam daki webbrowserin verdiği bir alert mesajına ulaşmanın bir yolu var mı ?
şimdi yukarıdaki örnekte aktif pencerenin caption u okunup içine ulaşılıyor, o an bir şekilde başka bir uygulama penceresi aktif olursa kod çalışmıyor, bu kodun aktif olmasada dahi benim uygulamam daki webbrowserin verdiği bir alert mesajına ulaşmanın bir yolu var mı ?
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
Re: TWebBrowser Alert Mesajları
Senin de bildiğin gibi örnek kodda GetForegroundWindow ile pencerenin Handle'ına ulaşılmış. Başka pencere aktif olunca tabiki onun handle'ı döndüğü için hiç bir zaman "if S = TargetCaption then" koşulu sağlanmıyor tahminin. Bence EnumWindows'u kullanarak tüm pencerelerin handle'larını sırasıyla kullanıp sonuca gidebilirsin.
Not: Aktif pencerede web browser kullanılıyor yada aktif pencere Internet Explorer'sa ve oradan Alert ile mesaj çıkmışsa işte o zaman senin uygulama bunu kendi mesajı zannedip işlem yapacaktır. Bu durumda problem nasıl çözülür bilemiyorum
Not: Aktif pencerede web browser kullanılıyor yada aktif pencere Internet Explorer'sa ve oradan Alert ile mesaj çıkmışsa işte o zaman senin uygulama bunu kendi mesajı zannedip işlem yapacaktır. Bu durumda problem nasıl çözülür bilemiyorum
There's no place like 127.0.0.1
Re: TWebBrowser Alert Mesajları
@SimaWB ,
bahsetmiş olduğun EnumWindows apisiyle http://www.delphiforfun.org/programs/de ... indows.htm linkteki örnekten yola çıkarak o an aktif uygulamaların ve açtıkları mesajların en üstte olanlarının pencerelerine ulaşabildim, teşekkür ederim.
bahsetmiş olduğun EnumWindows apisiyle http://www.delphiforfun.org/programs/de ... indows.htm linkteki örnekten yola çıkarak o an aktif uygulamaların ve açtıkları mesajların en üstte olanlarının pencerelerine ulaşabildim, teşekkür ederim.
Volkan KAMADAN
www.polisoft.com.tr
www.polisoft.com.tr
-
- Üye
- Mesajlar: 189
- Kayıt: 30 Eyl 2013 10:17
Re: TWebBrowser Alert Mesajları
Merhabalar,
Mesaj penceresini buluyor ama bir turlu kapattiramadim :S
Mesaj penceresini buluyor ama bir turlu kapattiramadim :S
Kod: Tümünü seç
var
S: string;
len: integer;
hLable: HWND;
begin
SetLength(S, 127);
len := GetWindowText(Application.ActiveFormHandle, PChar(S), 127);
if len = 0 then Exit;
SetLength(S, len);
if S = TargetCaption then
begin
hLable := FindControlByNumber(GetForegroundWindow, 'Static', 2);//JS alertin mesaj içeriğinin class'ı Static ve 2. sırada.
if hLable <> 0 then
begin
len := GetWindowText(Application.ActiveFormHandle, PChar(S), 127);
SetLength(S, len);
end;
SendMessage(hLable, WM_COMMAND, ID_OK, 0);
end;
-
- Üye
- Mesajlar: 189
- Kayıt: 30 Eyl 2013 10:17
Re: TWebBrowser Alert Mesajları
Kod: Tümünü seç
const
Messagefromwebpage = 'Web sayfasından ileti';
var
wnd: hWnd;
begin
wnd := FindWindow(nil, Messagefromwebpage);
if wnd <> 0 then
begin
PostMessage (Wnd, WM_CLOSE, 0, 0);
end;
Metin içerigini alirken
Kod: Tümünü seç
hLable := FindControlByNumber(GetForegroundWindow, 'Static', 2);//JS alertin mesaj içeriğinin class'ı Static ve 2. sırada.
if hLable <> 0 then
begin
Kod: Tümünü seç
len := GetWindowText(hLable, PChar(S), 127);