760729
一般會員
發表:32 回覆:51 積分:16 註冊:2004-09-08
發送簡訊給我
|
以下程式可以取得網頁上所有的鏈結, 但無法取得網頁上其它的物件, 如圖片的路徑或 POP-UP MENU 的 URL, 我查看了 MSDN 仍然無解, 不知各位高手, 可否幫忙解答, 謝謝. void CGetLinksDlg::OnBnClickedGetlinks()
{
TCHAR HostName[2*MAX_PATH];
CComPtr spDispatch;
CComQIPtr pDoc2;
CComPtr pElementCol;
CComPtr pLoct;
// TODO: Add your control notification handler code here
int n = m_LinksList.GetItemCount();//GetCount(); for (int i = 0; i < n; i ){
IWebBrowser2 *pBrowser = (IWebBrowser2 *)m_LinksList.GetItemData(i);
if (pBrowser){
pBrowser->Release();
}
} m_LinksList.DeleteAllItems();
m_LinksNum = 0;
Log("**************************************************************");
Log("\r\n"); if (m_spSHWinds){
int n = m_spSHWinds->GetCount();
for (int i = 0; i < n; i ){
_variant_t v = (long)i;
IDispatchPtr spDisp = m_spSHWinds->Item(v); SHDocVw::IWebBrowser2Ptr spBrowser(spDisp);
if (spBrowser){ if (SUCCEEDED(spBrowser->get_Document(
&spDispatch)))
pDoc2 = spDispatch;
if(pDoc2!=NULL)
{
if (SUCCEEDED(pDoc2->get_links
(&pElementCol)))
{
long p=0;
if(SUCCEEDED(pElementCol->get_length(&p)))
if(p!=0)
{
m_LinksNum = m_LinksNum p;
UpdateData(FALSE); for(long i=0;i<=(p-1);i )
{ CComBSTR String;
_variant_t index = i;
if(SUCCEEDED(pElementCol->item( index, index, &spDispatch)))
if(SUCCEEDED(spDispatch->QueryInterface( IID_IHTMLAnchorElement,(void **) &pLoct))) pLoct->get_href(&String); ZeroMemory(HostName,2*MAX_PATH);
lstrcpy(HostName,_bstr_t(String));
m_LinksList.InsertItem(i,HostName);
m_LinksList.SetCheck(i,TRUE);
pLoct->get_hostname(&String);
ZeroMemory(HostName,2*MAX_PATH);
lstrcpy(HostName,_bstr_t(String));
if(lstrlen(HostName))
{
m_LinksList.SetItemText(i,1,HostName);
Log(HostName );
Log("\r\n");
}
}
}
} } }
}
}
}
|
ddy
站務副站長
發表:262 回覆:2105 積分:1169 註冊:2002-07-13
發送簡訊給我
|
760729 您好
一、張貼程式請使用縮排[ code] [ /code],以利閱讀
二、相同文章請勿跨區重覆發表
void CGetLinksDlg::OnBnClickedGetlinks()
{
TCHAR HostName[2*MAX_PATH];
CComPtr spDispatch;
CComQIPtr pDoc2;
CComPtr pElementCol;
CComPtr pLoct;
// TODO: Add your control notification handler code here
int n = m_LinksList.GetItemCount();//GetCount(); for (int i = 0; i < n; i ++){
IWebBrowser2 *pBrowser = (IWebBrowser2 *)m_LinksList.GetItemData(i);
if (pBrowser){
pBrowser->Release();
}
} m_LinksList.DeleteAllItems();
m_LinksNum = 0;
Log("**************************************************************");
Log("\r\n"); if (m_spSHWinds){
int n = m_spSHWinds->GetCount();
for (int i = 0; i < n; i++){
_variant_t v = (long)i;
IDispatchPtr spDisp = m_spSHWinds->Item(v); SHDocVw::IWebBrowser2Ptr spBrowser(spDisp);
if (spBrowser){ if (SUCCEEDED(spBrowser->get_Document(
&spDispatch)))
pDoc2 = spDispatch;
if(pDoc2!=NULL)
{
if (SUCCEEDED(pDoc2->get_links
(&pElementCol)))
{
long p=0;
if(SUCCEEDED(pElementCol->get_length(&p)))
if(p!=0)
{
m_LinksNum = m_LinksNum+p;
UpdateData(FALSE); for(long i=0;i<=(p-1);i++)
{ CComBSTR String;
_variant_t index = i;
if(SUCCEEDED(pElementCol->item( index, index, &spDispatch)))
if(SUCCEEDED(spDispatch->QueryInterface( IID_IHTMLAnchorElement,(void **) &pLoct))) pLoct->get_href(&String); ZeroMemory(HostName,2*MAX_PATH);
lstrcpy(HostName,_bstr_t(String));
m_LinksList.InsertItem(i,HostName);
m_LinksList.SetCheck(i,TRUE);
pLoct->get_hostname(&String);
ZeroMemory(HostName,2*MAX_PATH);
lstrcpy(HostName,_bstr_t(String));
if(lstrlen(HostName))
{
m_LinksList.SetItemText(i,1,HostName);
Log(HostName );
Log("\r\n");
}
}
}
} } }
}
}
}
|
760729
一般會員
發表:32 回覆:51 積分:16 註冊:2004-09-08
發送簡訊給我
|
副站長您好: 因為本人的疏忽, 造成大家的不便, 深感抱歉.
|
pgdennis
資深會員
發表:41 回覆:526 積分:443 註冊:2002-05-23
發送簡訊給我
|
剛在delphi區看到,提供delphi寫法,希望你能看的懂
跟你原本找到的取得連結的程式碼很像
implementation
uses MSHTML;
{$R *.dfm} procedure TForm1.Button1Click(Sender: TObject);
var
Doc: IHTMLDocument2;
i:integer;
IMGs:IHTMLELEMENTCollection;
img:IHTMLImgElement;
begin //取得目前正在瀏覽的網頁的document}
Doc := WB1.Document as IHTMLDocument2;//wb1是webbroswer
IMGs:=doc.images as IHTMLELEMENTCollection;
//doc包含 imaes,links等物件集合.....
for i:=0 to IMGs.length-1 do begin
img:=(IMGs.item(i,i) as IHTMLImgElement);
ListView1.AddItem(img.href,nil);
end; end;
星期一,星期二...星期日..星期一..無窮迴圈@@
------ 星期一,二...無窮迴圈@@
|
ddy
站務副站長
發表:262 回覆:2105 積分:1169 註冊:2002-07-13
發送簡訊給我
|
引言: 因為本人的疏忽, 造成大家的不便, 深感抱歉.
別介意,一同來維持ktop文章品質 < src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=8147403&CC=182217">
|
760729
一般會員
發表:32 回覆:51 積分:16 註冊:2004-09-08
發送簡訊給我
|
|
Ktop_Robot
站務副站長
發表:0 回覆:3511 積分:0 註冊:2007-04-17
發送簡訊給我
|
提問者您好:
以上回應是否已得到滿意的答覆?
若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然, 將由版主(尚無版主之區域將由副站長或站長)採自由心證,選擇較合適之解答予以結案處理, 被選上之答題者同樣會有加分獎勵,同時發問者將受到扣 1 分的處分。不便之處,請見諒。
有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。
------ 我是機器人,我不接受簡訊.
|