이 팁은 이전에 박영목님께서 올려주신 execScript을 이용한 자바호출과 거의 같은 것입니다.
먼저 자료를 작성해 놓으신 박영목님께 감사의 말씀을 드립니다.
여기서는 C++빌더 2007에서 매우 간편한 방법으로
원하는 IE를 확인하고 그기에 있는 자바스크립터를 호출하는 예제로 꾸며봤습니다.
//---------------------------------------------------------------------------
#include <SHDocVw.hpp>
#include <MSHTML.h>
// IHTMLWindow2의 execScript을 이용한 자바호출
void ExecScript(IHTMLDocument2* doc, String script)
{
if (!doc)
return;
IHTMLWindow2* win;
HRESULT hr = doc->get_parentWindow(&win);
if (SUCCEEDED(hr))
{
try
{
VARIANT v;
VariantInit(&v);
win->execScript( WideString(script), WideString("javascript"), &v );
VariantClear(&v);
}
__finally
{
win->Release();
}
}
}
// 자바스크립트 호출 테스트.
void __fastcall TForm4::Button4Click(TObject *Sender)
{
TShellWindows* ShellWin = new TShellWindows(NULL);
IWebBrowser2* IE;
try
{
for(int i = 0; i < ShellWin->Count; i++)
{
if (ShellWin->Item(i) == NULL)
continue;
ShellWin->Item(i)->QueryInterface(IID_IWebBrowser2, (void **)&IE);
if (IE == NULL)
continue;
if (IE->LocationURL.SubString(1, 7) != "
http://")
continue;
IHTMLDocument2* doc;
if (SUCCEEDED((IE->Document->QueryInterface(IID_IHTMLDocument2, (void**)&doc))))
{
Form4->Memo1->Lines->Add(IE->LocationURL);
char cmd[300];
wsprintf(cmd, "alert('코드기어포럼 %s')", String(IE->LocationURL).c_str());
ExecScript(doc, cmd);
doc->Release();
}
}
}
__finally
{
delete ShellWin;
}
}
//---------------------------------------------------------------------------
이 정도 예제면 충분히 원하는대로 고쳐서 쓸수 있을 것으로 생각됩니다.
위
if (IE->LocationURL.SubString(1, 7) != "
http://")
continue;
부분에서 적당히 수정하면 원하는 사이트를 필터링 할수 있습니다.
이 정도는 초보도 할수 있으므로 따로 설명을 하지 않습니다.
이 팁은 실무에 너무나 유용한 것입니다.
이걸 VC에서 하려면 상당한 힘을 들여야 하는데 빌더는 너무나 간편하죠. 빌더 만세!
하지만 델파이는 조금 더 간편하게 할수 있다는거...
그럼.
2007에 대한 팁/자료/ Q&A 등는 확인해 볼수가 없으니 답답...!