C++模拟网页点击

void dlg_playcominfo::DocumentCompleted(IDispatch *disp, VARIANT *&url)
 {
	 CComPtr<IDispatch> pDisp = NULL;
	 CComPtr<IWebBrowser2>   wb  =m_browser->GetWebBrowser2();
	 if(SUCCEEDED( wb->get_Application(&pDisp))) 
	 {
		 if(disp == pDisp) //表示加载完成(iframe取消)
		 {			
			 std_string u;
			 u  =url->bstrVal;	
			 CComPtr<IDispatch> pPre = NULL;
			 CComPtr<IHTMLDocument2> pDocTemp = NULL;
			 if(u.iContains("18000/index.php/client/qqlogin"))
			 {		
		 		if(SUCCEEDED(wb->get_Document(&pPre))) //get_Document
		 		{
		 			if(SUCCEEDED(pPre->QueryInterface(IID_IHTMLDocument2, (void **)&pDocTemp))) 
		 			{
		 				CComPtr<IHTMLWindow2>  pWin;
		 				if(SUCCEEDED(pDocTemp->get_parentWindow(&pWin))){
							VARIANT res;
							std_wstring ep(elseParams);
							std_wstring  temp;
							temp.AppendFormat(L"getimgurl(%s);",ep.c_str());
							BSTR js = SysAllocString(temp.c_str());
							BSTR jst = SysAllocString(L"javascript");
							HRESULT   hr = pWin->execScript(js,jst,&res);
							SysFreeString(js);
							SysFreeString(jst);
						}
		 			}
		 		}
			 }
			 else  if(u.iContains("sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url"))
			 {
				 
				 if(SUCCEEDED(wb->get_Document(&pPre))) //get_Document
				 {
					 if(SUCCEEDED(pPre->QueryInterface(IID_IHTMLDocument2, (void **)&pDocTemp))) 
					 {				
						 CComPtr<IHTMLElementCollection>   pAllElem = NULL;
						 HRESULT hr = pDocTemp->get_all(&pAllElem);//get_all
						 if(SUCCEEDED(hr) && pAllElem) 
						 {
							 LONG lcount;
							 hr = pAllElem->get_length(&lcount);
							 if(SUCCEEDED(hr))
							 {
								 VARIANT        ElemName;
								 VARIANT        ElemIndex;
								 int  k =0;
								 for(int i=0; i<lcount; i++) //遍历
								 {
									 /

									 CComPtr<IDispatch> pDisp2 = NULL;
									 ElemName.vt = VT_INT;
									 ElemName.intVal = i;
									 ElemIndex.vt = VT_INT;
									 ElemIndex.intVal = i;

									 hr = pAllElem->item(ElemName, ElemIndex, &pDisp2);
									 if(SUCCEEDED(hr) && pDisp2) 
									 {
										 CComPtr<IHTMLElement> pElement2 = NULL;
										 hr = pDisp2->QueryInterface(IID_IHTMLElement, (void**)&pElement2);
										 if(SUCCEEDED(hr) && pElement2) 
										 {
											 BSTR bStrTagName2,clsn;
											 if(SUCCEEDED(pElement2->get_tagName(&bStrTagName2)))
											 {
												 if (_wcsicmp(bStrTagName2, L"SPAN")==0)
												 {
													 if(SUCCEEDED(pElement2->get_className(&clsn)) && clsn  )
													 {
														 if(_wcsicmp(clsn, L"btn_s1_h28_r")==0 ) //类名
														 {
															 pElement2->click();
														 }
													 }
												 }
											 }
										 }
									 }
									 //
								 }
							 }
						 }
					 }
				 }
				 
			 }
		 }
	 }
 }

C++中编写自动点击屏幕的脚本通常不是标准库的一部分,因为这需要操作系统级别的控制,而这超出了纯C++语言的功能范围。然而,如果你打算在Windows平台上使用图形用户界面(GUI)相关的库,比如Qt或wxWidgets,你可以创建一个小工具来模拟鼠标操作。 这里是一个简单的例子,使用Windows API和`#include <windows.h>`头文件来实现鼠标点击: ```cpp #include <iostream> #include <windows.h> // 函数声明用于模拟鼠标左键点击 LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam); int main() { // 设置鼠标事件处理器 MSG msg; HHOOK mouseHook = SetWindowsHookEx(WH_MOUSE_LL, MouseProc, NULL, GetCurrentThreadId()); if (mouseHook == NULL) { std::cerr << "Failed to set mouse hook" << std::endl; return 1; } // 进入消息循环 while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } // 删除钩子并结束程序 UnhookWindowsHookEx(mouseHook); PostQuitMessage(0); return 0; } // 鼠标钩子函数,处理鼠标的左键按下和释放 LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam) { MOUSEHOOKSTRUCT* mouseStruct = (MOUSEHOOKSTRUCT*)lParam; if (nCode >= 0 && wParam == WM_LBUTTONDOWN) { // 左键按下 POINT pt = mouseStruct->pt; ClientToScreen(GetForegroundWindow(), &pt); ScreenToClient(*reinterpret_cast<HWND*>(lParam), &pt); // 转换到窗口坐标 // 执行点击操作 INPUT input; input.type = INPUT_MOUSE; input.mi.dx = pt.x; input.mi.dy = pt.y; input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP; SendInput(1, &input, sizeof(INPUT)); Sleep(500); // 点击后的延迟,可以根据需求调整 } return CallNextHookEx(NULL, nCode, wParam, lParam); } ``` 这个示例会捕获鼠标左键按下和释放的消息,并在指定位置模拟点击动作。请注意,这仅适用于桌面应用程序,对于需要跨进程操作的情况,如网页浏览器,你需要使用更为复杂的方案,比如通过模拟键盘输入或者利用第三方自动化库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值