Internet Explorer Html Source

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
fatih_muti
Üye
Mesajlar: 10
Kayıt: 13 Kas 2005 06:47

Internet Explorer Html Source

Mesaj gönderen fatih_muti »

Merhaba,

Handle numarasını bildiğim bir internet explorer sayfasının html kodlarını nasıl alabilirim. yani Görünüm > Kaynak tıklanarak açılmış gibi bunu forma nasıl aktarabilirim.

Kod: Tümünü seç

var
HSonrakiWinMsg,HFare : HWND;
isaretleyici : TPOINT; 
baslikUzunlugu : integer; 
baslik : string; 
begin
GetCursorPos(isaretleyici); 
HFare := WindowFromPoint(isaretleyici); 
if HFare = HSonrakiWinMsg then Exit;
HSonrakiWinMsg := HFare; 
baslikUzunlugu := SendMessage(HFare, WM_GETTEXTLENGTH, 0, 0) + 1; 
SetLength(baslik, baslikUzunlugu);
SendMessage(HSonrakiWinMsg, WM_GETTEXT, baslikUzunlugu,LongInt(@baslik[1]));
label1.Caption:=inttostr(HSonrakiWinMsg)+' '+baslik;
end;
Bu Kod ile mouse u kullanarak handle buluyorum.

Aslında Tam Olarak Yapmak İstediğim Şey bu handle ını bildiğim internet explorer sayfasını html kodlarını alıp formda

Kod: Tümünü seç

var
ara,str:string;
sayi:integer;
begin
ara:=edit2.Text;
str:=memo1.Text;
if pos(ara,str)>0
then begin
sayi:=pos(ara,str);
showmessage('Aradığınız Kelimeden '+inttostr(sayi)+'. karakterde bulundu');
end;
bu tarz bir kodla sayfa görüntülenemiyor veya başka bir hata verip vermediğini anlayıp o sayfaya refresh komutu göndermek istiyorum...

İyi Akşamlar...
kahraman1285
Üye
Mesajlar: 360
Kayıt: 10 Nis 2006 09:07

Mesaj gönderen kahraman1285 »

İnternet explorer'a refresh komutu gönderebilirmisin o konuda pek bilgim yok.Çünkü uygulamaya komut göndermek o kadar kolay olmaz diye düşünüyorum.

Sayfanın html kodlarını almaya gelince ben web browser ile sayfanın tamamını kaydedip offline olarak kullanmayı daha dün yaptım.istersen buna bi gözat.

viewtopic.php?t=17965

bide aklıma şu geledi indy TIDHttp komponenti ile sayfanın htmal kodları içinde arama yapılabildiğini bilyorum.

istersen bide ona bak..
kahraman1285
Üye
Mesajlar: 360
Kayıt: 10 Nis 2006 09:07

Mesaj gönderen kahraman1285 »

Tamam dediğim gibi TIDHttp componenti ile oluyor.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
 s:string;

begin
s:=IdHttp.Get('http://www.delphiturkiye.com/');

end;
Gelen string bilgisini bir memoya atıp ordan kaydedebilir yada strem oluşturarak kaydedebilirsin.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Kod: Tümünü seç

  Browser      : IWebBrowser2;
tipinde tanımlı bir değişkene refreshetmek istediğiniz pencerenin handle'ini verip bağladığınızda, Browser.Refresh komutu tazeleme için yeterlidir.
Resim
Resim ....Resim
fatih_muti
Üye
Mesajlar: 10
Kayıt: 13 Kas 2005 06:47

Mesaj gönderen fatih_muti »

mrmarman yazdı:

Kod: Tümünü seç

  Browser      : IWebBrowser2;
tipinde tanımlı bir değişkene refreshetmek istediğiniz pencerenin handle'ini verip bağladığınızda, Browser.Refresh komutu tazeleme için yeterlidir.
Refresh işini bu şekilde halledebilirim. Ancak html source bana o anki source lazım çünkü sayfa görüntülenemiyor hatası verdiini algılayıp refresh yapıcak. Yani form içindeki webbrowser la yaptığın zaman o sayfanın açılma ihtimali çok büyük. Bide Refresh IExplorer a F5 veya CTRL+R tuşları gönderilerekte olabilir...

Yardımcı olmaya çalışan herkeze çok teşekkür ederim...
fatih_muti
Üye
Mesajlar: 10
Kayıt: 13 Kas 2005 06:47

Mesaj gönderen fatih_muti »

Bide Söylemesi Ayıp browser a handle veremedim onu nasıl yapabilirim :?: :)
fatih_muti
Üye
Mesajlar: 10
Kayıt: 13 Kas 2005 06:47

Mesaj gönderen fatih_muti »

Sorunumun büyük bir bölümünü hallettim...Herkese Teşekkür Ederim...


Kod: Tümünü seç

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, MSHTML, ActiveX, OleCtrls, SHDocVw, StdCtrls;

type
  TForm1 = class(TForm)
    SourceView: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;


const
  RSPSIMPLESERVICE     = 1;
  RSPUNREGISTERSERVICE = 0;

implementation

{$R *.dfm}


type
TObjectFromLResult = function(LRESULT: lResult; const IID: TIID; WPARAM: wParam; out pObject): HRESULT; stdcall;

//This function detects the Window
function GetIEFromHWND(WHandle: HWND; var IE: IWebbrowser2): HRESULT;
var
  hInst: HWND;
  lRes: Cardinal;
  MSG: Integer;
  pDoc: IHTMLDocument2;
  ObjectFromLresult: TObjectFromLresult;
begin
  hInst := LoadLibrary('Oleacc.dll');
  @ObjectFromLresult := GetProcAddress(hInst, 'ObjectFromLresult');
  if @ObjectFromLresult <> nil then begin
    try
      MSG := RegisterWindowMessage('WM_HTML_GETOBJECT');
      SendMessageTimeOut(WHandle, MSG, 0, 0, SMTO_ABORTIFHUNG, 1000, lRes);
      Result := ObjectFromLresult(lRes, IHTMLDocument2, 0, pDoc);
      if Result = S_OK then
        (pDoc.parentWindow as IServiceprovider).QueryService(IWebbrowserApp, IWebbrowser2, IE);
    finally
      FreeLibrary(hInst);
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
        All: IHtmlElementCollection;
        HtmlElement: IHtmlElement;
        I: Integer;
        Document: IHtmlDocument2;
        IE: IWebBrowser2;
        Wnd: HWND;
        WndChild: HWND;
begin
        Wnd := FindWindow('IEFrame', nil);
        if Wnd = 0 then
        begin
             MessageDlg ('No Running instance of Internet Explorer!',mtError, [mbOK], 0);
        end;
// walk Shell DocObject View->Internet Explorer_Server
        WndChild := FindWindowEX(Wnd, 0, 'Shell DocObject View', nil);
        if WndChild <> 0 then begin
         WndChild := FindWindowEX(WndChild, 0, 'Internet Explorer_Server', nil);
        if WndChild <> 0 then
        begin
                GetIEFromHWnd(WndChild, IE); //Get Iwebbrowser2 from Handle
                Document := IE.Document as IHtmlDocument2;
                if (assigned(Document)) then
                begin
                        All := Document.All;
                        for I := 0 to All.Length -1 do
                        begin
                                HtmlElement := All.item(i,0) as IhtmlElement;
                                if (assigned(Document)) then
                              SourceView.Lines.Add (IntToStr(i) + ' ' + HTmlElement.innerHTML);
                        end;
               end;
          end;
      end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
sourceview.Text:='';
end;

end.
Bu Kodla İnternet Explorer ın html kodlarını alıyorum...

Kod: Tümünü seç

procedure TForm1.Button3Click(Sender: TObject);
var
ara,str:string;
sayi:integer;
begin
ara:=edit2.Text;
str:=memo1.Text;
if pos(ara,str)>0
then begin
sayi:=pos(ara,str);
showmessage('Aradığınız Kelimeden '+inttostr(sayi)+'. karakterde bulundu')
end else
showmessage('Aradığınız Kelime Yoq');
end;
Bu Kodla içinde Sunucu Bulunamıyor vs yazıyormu diye kontrol ediyorum...

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject); 
var 
ShellWindow: IShellWindows; 
WB: IWebbrowser2; 
spDisp: IDispatch; 
IDoc1: IHTMLDocument2; 
k: Integer;
begin 
ShellWindow := CoShellWindows.Create; 
for k := 0 to ShellWindow.Count do 
begin 
spDisp := ShellWindow.Item(k); 
if spDisp = nil then Continue; 
spDisp.QueryInterface(iWebBrowser2, WB); 
if WB <> nil then 
begin 
WB.Document.QueryInterface(IHTMLDocument2, iDoc1); 
if iDoc1 <> nil then 
begin 
WB := ShellWindow.Item(k) as IWebbrowser2; 
WB.Refresh; 
end; 
end; 
end; 
end;
Bu kodlada açık olan tüm pencerelere refresh yapıorum...

Bunları birazdaha değiştirerek amacıma ulaştım.

Şimdi Sadece Tek bir Sorunum var.
Açık olan internet explorer sayfasını sürekli aşağıda nası tutabilirim ?
bir internet explorer sayfası var sürekli kendiliğinden aşağıya indirsende yukarıya çıkıyor içindeki bir script yüzünden.Timer a bağlayarak tutmayı düşünüyorum... Bende bu sayfayı (Handle ını bildiğim veya tüm internet exlorer sayfalarını) nasıl aşağıda tutabilirim.
X_ALPEREN_X
Üye
Mesajlar: 26
Kayıt: 20 Nis 2006 02:04

Mesaj gönderen X_ALPEREN_X »

kahraman1285 yazdı:Tamam dediğim gibi TIDHttp componenti ile oluyor.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
 s:string;

begin
s:=IdHttp.Get('http://www.delphiturkiye.com/');

end;
Gelen string bilgisini bir memoya atıp ordan kaydedebilir yada strem oluşturarak kaydedebilirsin.

arkadaşım bu kodları yazdım oluyor amaaaa
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;

begin
s:=IdHttp.Get('http://www.google.com/');

end;

gibi bazı sitelerde hata veriyor program...
en basit şekilde sadece sayfanın kaynağını nasıl bie memo içerisine atabilirim?
shadowmann
Üye
Mesajlar: 508
Kayıt: 30 Oca 2004 10:49

Mesaj gönderen shadowmann »

Bu kodla yapabilirsin.

Kod: Tümünü seç

  var
  Doc: IHTMLDocument2;
  begin 
  Doc := WebBrowser1.Document as IHTMLDocument2;
  Memo1.Text := Doc.body.InnerHTML;
X_ALPEREN_X
Üye
Mesajlar: 26
Kayıt: 20 Nis 2006 02:04

Mesaj gönderen X_ALPEREN_X »

şöyle bir örnekle anlatsam daha iyi olacak

a:=idhttp1.Get('http://websitesi.com/'+edit1.text);
memo1.text:=a;

bu şekilde edite girilen isimdeki dosya veya klasörün kaynağını memo içine atabiliyorum ama yazılan dosya veya klasör adı eğer sitede yoksa program çalışmaya devam ediyor ama sürekli hata mesajı veriyor. hata vermesini nasıl engelleyebilirim?
kahraman1285
Üye
Mesajlar: 360
Kayıt: 10 Nis 2006 09:07

Mesaj gönderen kahraman1285 »

shadowmann yazdı:Bu kodla yapabilirsin.

Kod: Tümünü seç

  var
  Doc: IHTMLDocument2;
  begin 
  Doc := WebBrowser1.Document as IHTMLDocument2;
  Memo1.Text := Doc.body.InnerHTML;
IHTMLDocument2; tanımlamasının uniti nedir;

Id http nesnesinin get özelliğini ben döviz kurları indirmede kullamıştım.
shadowmann
Üye
Mesajlar: 508
Kayıt: 30 Oca 2004 10:49

Mesaj gönderen shadowmann »

mshtml .
Cevapla