如何以编程方式将一个 IMG 元素复制到剪贴板

来源:互联网 发布:mac迅雷扩展插件 编辑:程序博客网 时间:2024/06/05 00:37

将 Web 页上的图像复制到剪贴板上最好的方法是使用 execCommandcontrolRange 对象的方法。若要在页本身 (授予要复制的图像 ID) 上的脚本中执行此从下面的代码阐释:

   function copyImage(sImgID)    {      var ctrlRange = document.body.createControlRange();      ctrlRange.add(document.all(sImgID));      ctrlRange.execCommand("Copy");   }

在 Microsoft Visual c + +,此方法调用转换为 IHTMLControlRange::execCommand。下面的代码演示如何在 Visual c + + 的 IDispatch 指针给包含图像和 VARIANT 结构中 (与 VT_BSTR 类型) 包装的 IMG 元素的 ID 在文档中实现相同的技术:

   STDMETHODIMP CMyBrowser::CopyImage(LPDISPATCH pDispDoc, VARIANT vImageID)   {      HRESULT hr        = E_FAIL;      IHTMLDocument2* pDoc = NULL;      IHTMLElement* pelmBody = NULL;      IHTMLElement2* pelmBodyTwo = NULL;      IDispatch* pdispImgElement = NULL;      IDispatch* pdispCtrlRange = NULL;      IHTMLElementCollection* pColl = NULL;      IHTMLControlElement* pCtrlElement = NULL;      IHTMLControlRange* pCtrlRange = NULL;      BSTR bstrCommand = SysAllocString(L"Copy");      VARIANT_BOOL vbReturn;      VARIANT vEmpty;      VariantInit(&vEmpty);      if (pDispDoc == NULL)         goto Cleanup;      if (FAILED(pDispDoc->QueryInterface(IID_IHTMLDocument2, (void**) &pDoc)))         goto Cleanup;      if (FAILED(pDoc->get_all(&pColl)))         goto Cleanup;      if (FAILED(pColl->item(vImageID, vEmpty, &pdispImgElement))             || pdispImgElement == NULL)         goto Cleanup;      if (FAILED(pDoc->get_body(&pelmBody)) || pelmBody == NULL)         goto Cleanup;      if (FAILED(pelmBody->QueryInterface(IID_IHTMLElement2, (void**) &pelmBodyTwo))             || pelmBodyTwo == NULL)         goto Cleanup;      if (FAILED(pelmBodyTwo->createControlRange(&pdispCtrlRange))             || pdispCtrlRange == NULL)         goto Cleanup;      if (FAILED(pdispCtrlRange->QueryInterface(IID_IHTMLControlRange, (void**) &pCtrlRange))             || pCtrlRange == NULL)         goto Cleanup;      if (FAILED(pdispImgElement->QueryInterface(IID_IHTMLControlElement, (void**) &pCtrlElement))             || pCtrlElement == NULL)         goto Cleanup;      hr = pCtrlRange->add(pCtrlElement);      if (SUCCEEDED(hr))         hr = pCtrlRange->execCommand(bstrCommand, VARIANT_FALSE, vEmpty, &vbReturn);      pCtrlElement->Release();      hr = S_OK;   Cleanup:      SysFreeString(bstrCommand);      if (pCtrlRange)         pCtrlRange->Release();      if (pdispCtrlRange)         pdispCtrlRange->Release();      if (pelmBodyTwo)         pelmBodyTwo->Release();      if (pelmBody)         pelmBody->Release();      if (pdispImgElement)         pdispImgElement->Release();      if (pColl)         pColl->Release();      if (pDispDoc)         pDispDoc->Release();      return hr;   }
原创粉丝点击