读书人

一个验证码图片 如何粘贴到剪切板上呢

发布时间: 2013-09-10 13:42:18 作者: rapoo

一个验证码图片 怎么粘贴到剪切板上呢
验证码html 如下<img src="/code/bin/verify/captcha.php" width="114" height="40" onClick='this.src="/code/bin/verify/captcha.php?n="+Math.random();' alt="一个验证码图片 如何粘贴到剪切板上呢">

他是没有名字的 我找到的验证码放到剪贴板上的代码是



IHTMLElementCollection *objAllElement=NULL;
IHTMLDocument2 *objDocument=NULL;
CComPtr <IDispatch> pDisp;

objDocument=(IHTMLDocument2 *)m_IE.get_Document();
objDocument->get_all(&objAllElement);


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);
IHTMLDocument2 *pDispDoc=NULL;
pDispDoc=(IHTMLDocument2 *)m_IE.get_Document();
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(COleVariant( _T("random_img")), COleVariant((long)0), &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 ( IsClipboardFormatAvailable(CF_BITMAP) )
{

HWND hwnd;
CRect rc;

if (OpenClipboard())
{

HBITMAP hbm = (HBITMAP)GetClipboardData(CF_BITMAP);
m_picture.SetBitmap(hbm);
m_picture.Invalidate();
CloseClipboard();
}


}




其中一段是错误的 我知道 是用验证码的名字获取,可是验证码没有名字怎么获取呢?
if (FAILED(pColl->item(COleVariant( _T("random_img")), COleVariant((long)0), &pdispImgElement))
|| pdispImgElement == NULL)

这句 怎么写呢 怎么获取验证码呢?
[解决办法]
没做过,帮顶
[解决办法]
楼主是想识别图片的验证码?用opencv,具体步骤google
[解决办法]
验证码能这么轻易获取,那验证码就失去意义了。
一般验证码图片是在服务器端合成的图片,只能获得图片,很难获得验证码的文字。
[解决办法]
先下载这个图片,再打开这个图片,转为bmp,复制到剪贴板就完了
[解决办法]
用IE组件来得到图片是个不好的办法,因为如果你知道图片的URL,就可以直接下载

[解决办法]
对你这个流程很感兴趣。背景和重要的文字是分离的吧。是在服务器根据客户点击随机合成还是别的方式?
生成文件没有名字?

感觉困难不仅涉及到网页层面。
[解决办法]
小溪一下!

莫非楼主想偷梁换柱
[解决办法]
引用:
引用:
对你这个流程很感兴趣。背景和重要的文字是分离的吧。是在服务器根据客户点击随机合成还是别的方式?
生成文件没有名字?

感觉困难不仅涉及到网页层面。

你说的啥啊 我咋看的稀里糊涂

你标题是验证码图片,问题却是“怎么写呢 怎么获取验证码呢?”。这写的有点糊涂吧。
真实的验证码是被随机拼到图片背景中的。你只能下图片文件,需要知道验证码图片的文件名?
你是针对某个具体的网站?名字应该是确定的,但每次下的文件是不同的。

因为对你想做什么不了解,呵呵。

读书人网 >VC/MFC

热点推荐