C++ IWebBrowser2模拟左键单击
我不想实现的是在使用IWebBrowser2类创建的web浏览器中模拟左键单击 现行代码C++ IWebBrowser2模拟左键单击,c++,click,sendmessage,postmessage,iwebbrowser2,C++,Click,Sendmessage,Postmessage,Iwebbrowser2,我不想实现的是在使用IWebBrowser2类创建的web浏览器中模拟左键单击 现行代码 if (SUCCEEDED(OleInitialize(NULL))){ IWebBrowser2* pBrowser2; CoCreateInstance(CLSID_InternetExplorer, NULL, CLSCTX_LOCAL_SERVER, IID_IWebBrowser2, (void**)&pBrowser2);
if (SUCCEEDED(OleInitialize(NULL))){
IWebBrowser2* pBrowser2;
CoCreateInstance(CLSID_InternetExplorer, NULL, CLSCTX_LOCAL_SERVER,
IID_IWebBrowser2, (void**)&pBrowser2);
if (pBrowser2){
VARIANT vEmpty;
VariantInit(&vEmpty);
BSTR bstrURL = SysAllocString(L"http://google.pl");
HRESULT hr = pBrowser2->Navigate(bstrURL, &vEmpty, &vEmpty, &vEmpty, &vEmpty);
if (SUCCEEDED(hr))
{
pBrowser2->put_Visible( VARIANT_FALSE );
pBrowser2->put_FullScreen( VARIANT_TRUE );
}
else
{
pBrowser2->Quit();
}
srand( time( NULL ) );
Sleep( ( std::rand() % 5000 ) + 5000 );
if(std::rand() % 100 > chance ){
SysFreeString(bstrURL);
pBrowser2 -> Release();
return;
}
HWND handle;
if( pBrowser2 -> get_HWND( ( long *)&handle ) != S_OK ){
return;
}
IServiceProvider* pServiceProvider = NULL;
if (SUCCEEDED(pBrowser2->QueryInterface(IID_IServiceProvider, (void**)&pServiceProvider))){
IOleWindow* pWindow = NULL;
if (SUCCEEDED(pServiceProvider->QueryService(
SID_SShellBrowser,
IID_IOleWindow,
(void**)&pWindow))){
HWND hwndBrowser = NULL;
if (SUCCEEDED(pWindow->GetWindow(&hwndBrowser))){
RECT windowRect;
GetWindowRect( hwndBrowser , &windowRect );
for( int i = 0 ; i < 100 ; i++ ){
//just for test
int positionX = ( ( std::rand() ) % ( windowRect.right - windowRect.left ) ) + windowRect.left;
int positionY = ( ( std::rand() ) % ( windowRect.bottom - windowRect.top ) ) + windowRect.top;
printf( "%d | %d\n",positionX,positionY);
PostMessage( hwndBrowser, WM_LBUTTONDOWN, 0, MAKELPARAM(positionX,positionY) );
Sleep( 10 );
PostMessage ( hwndBrowser, WM_LBUTTONUP, 0, MAKELPARAM(positionX,positionY) );
}
}
pWindow->Release();
}
pServiceProvider->Release();
}
pBrowser2->put_Visible(VARIANT_TRUE);
SysFreeString(bstrURL);
pBrowser2 -> Release();
}
OleUninitialize();
}
if(成功(OleInitialize(NULL))){
IWebBrowser2*pBrowser2;
CoCreateInstance(CLSID\u InternetExplorer,NULL,CLSCTX\u本地\u服务器,
IID_IWebBrowser2,(无效**)和pBrowser2);
如果(pBrowser2){
变异狂暴;
Variatinit(&vEmpty);
BSTR bstrURL=SysAllocString(L)http://google.pl");
HRESULT hr=pBrowser2->导航(bstrURL,&vEmpty,&vEmpty,&vEmpty,&vEmpty,&vEmpty);
如果(成功(hr))
{
pBrowser2->put_Visible(变量_FALSE);
pBrowser2->全屏显示(变量为真);
}
其他的
{
pBrowser2->Quit();
}
srand(时间(空));
睡眠((标准::兰德()%5000)+5000);
如果(std::rand()%100>机会){
SysFreeString(bstrURL);
pBrowser2->Release();
返回;
}
HWND手柄;
如果(pBrowser2->get_HWND((长*)和handle)!=S_OK){
返回;
}
IServiceProvider*pServiceProvider=NULL;
if(成功(pBrowser2->QueryInterface(IID_IServiceProvider,(void**)和pServiceProvider))){
IOleWindow*pWindow=NULL;
如果(成功)(pServiceProvider->QueryService(
Sidsshellbrowser,
IID_IOleWindow,
(无效**和pWindow))){
HWND hwndBrowser=NULL;
if(成功(pWindow->GetWindow(&hwndBrowser))){
矩形窗口矩形;
GetWindowRect(hwndBrowser和windowRect);
对于(int i=0;i<100;i++){
//只是为了测试
int positionX=((std::rand())%(windowRect.right-windowRect.left))+windowRect.left;
int positionY=((std::rand())%(windowRect.bottom-windowRect.top))+windowRect.top;
printf(“%d |%d\n”,位置x,位置y);
PostMessage(hwndBrowser、WM_LBUTTONDOWN、0、MAKELPARAM(positionX、positionY));
睡眠(10);
PostMessage(hwndBrowser,WM_LBUTTONUP,0,makelpram(positionX,positionY));
}
}
pWindow->Release();
}
pServiceProvider->Release();
}
pBrowser2->put_Visible(变量_TRUE);
SysFreeString(bstrURL);
pBrowser2->Release();
}
OleUninitialize();
}
但什么也没发生。此外,我还尝试了SendMessage和有/无可见窗口
第二种方法是访问dom并尝试调用click事件,但这是可能的吗?您是否找到了解决方案?