📄 cwdw.cpp
字号:
// function to call "window.document.write("Hello")" on
// a script host application
HRESULT CallWindowDocumentWrite(IActiveScriptSite *pass)
{
// Get dispatch interface for window from host application
IUnknown *punkWindow = 0;
HRESULT hr = pass->GetItemInfo(OLESTR("window"), SCRIPTINFO_IUNKNOWN,
&punkWindow, 0);
if (FAILED(hr)) return hr;
IDispatch *pdWindow = 0;
hr = punkWindow->QueryInterface(IID_IDispatch, (void**)&pdWindow);
punkWindow->Release();
if (FAILED(hr)) return hr;
// get dispatch interface for window.document
OLECHAR *rgszNames[] = { OLESTR("document") };
DISPID id;
hr = pdWindow->GetIDsOfNames(IID_NULL, rgszNames, 1, 0, &id);
if (SUCCEEDED(hr))
{
IDispatch *pdDocument = 0;
VARIANT varResult; ZeroMemory(&varResult, sizeof(varResult));
DISPPARAMS dp = {0, 0, 0, 0};
hr = pdWindow->Invoke(id, IID_NULL, 0, DISPATCH_PROPERTYGET,
&dp, &varResult, 0, 0);
if (SUCCEEDED(hr))
{
assert(varResult.vt == VT_UNKNOWN || varResult.vt == VT_DISPATCH);
hr = varResult.punkVal->QueryInterface(IID_IDispatch,
(void**)&pdDocument);
VariantClear(&varResult);
}
// call window.document.write("Hello") (pdDocument == window.document)
if (SUCCEEDED(hr))
{
// look up write method
rgszNames[0] = OLESTR("write");
hr = pdDocument->GetIDsOfNames(IID_NULL, rgszNames, 1, 0, &id);
if (SUCCEEDED(hr))
{
// execute write method
VARIANTARG arg; ZeroMemory(&arg, sizeof(arg));
arg.vt = VT_BSTR; arg.bstrVal = SysAllocString(OLESTR("Hello"));
DISPPARAMS dp = {&arg, 0, 1, 0};
hr = pdWindow->Invoke(id, IID_NULL, 0, DISPATCH_METHOD,
&dp, 0, 0, 0);
VariantClear(&arg);
}
pdDocument->Release();
}
}
pdWindow->Release();
return hr;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -