我要做个小程序,是将遨游的URL地址替换后转向页面,成功替换URL地址后我发现遨游的“转到”按钮无法获得句柄,所以无法使用WM_LBUTTONDOWN来单击,所以想问下遨游“转到”那个按钮的句柄? 或者再换个思想,我们先替换了地址,然后单击URL地址,再用API发送回车,这样是不是可以同样达到目的,于是我就用了,WM_LBUTTONDOWN和WM_LBUTTONUP来实现单击效果,但问题来了,怎么发送回车啊,以下是我的代码,大家看看有什么问题。child是地址栏的句柄。
=============================划分线=====================
方法:
SendMessage(child, WM_KEYDOWN,VK_RETURN, 0);
这些我都测试过了,不行啊!有高手可以帮忙一下吗?留下我的联系方法:QQ117993379 谢谢了
问题补充:补充一下,我获得句柄的代码:
int parent = FindWindow("Maxthon2_Frame", null);
int child = FindWindowEx(parent, 0, "XTPDockBar", null);
child = FindWindowEx(child, 0, "XTPToolBar", "地址栏");
child = FindWindowEx(child, 0, "RichEdit20W", null); =============================划分线=====================
经过我研究了两个月,发现了几个原因1.句柄的获取不到原因,用SPY++查看遨游那个转到按钮的句柄,发现是镶嵌在地址栏XTPToolBar那个工具里面的,不能单独获得句柄。
2.向RichEdit20W发送回车,是进行换行,并不是转向的功能,但在IE进行SendMessage(child, WM_KEYDOWN,VK_RETURN, 0);是可以进行转到新页面的。所以现在要解决的问题是:获得按钮句柄(我可以进行鼠标左键按下达到目的)或者令RichEdit20W发送VK_RETURN不进行换行。请高手解答,谢谢啦
=============================划分线=====================
方法:
SendMessage(child, WM_KEYDOWN,VK_RETURN, 0);
这些我都测试过了,不行啊!有高手可以帮忙一下吗?留下我的联系方法:QQ117993379 谢谢了
问题补充:补充一下,我获得句柄的代码:
int parent = FindWindow("Maxthon2_Frame", null);
int child = FindWindowEx(parent, 0, "XTPDockBar", null);
child = FindWindowEx(child, 0, "XTPToolBar", "地址栏");
child = FindWindowEx(child, 0, "RichEdit20W", null); =============================划分线=====================
经过我研究了两个月,发现了几个原因1.句柄的获取不到原因,用SPY++查看遨游那个转到按钮的句柄,发现是镶嵌在地址栏XTPToolBar那个工具里面的,不能单独获得句柄。
2.向RichEdit20W发送回车,是进行换行,并不是转向的功能,但在IE进行SendMessage(child, WM_KEYDOWN,VK_RETURN, 0);是可以进行转到新页面的。所以现在要解决的问题是:获得按钮句柄(我可以进行鼠标左键按下达到目的)或者令RichEdit20W发送VK_RETURN不进行换行。请高手解答,谢谢啦
IWebBrowser::Navigate
SendMessage(0x000106b2, WM_LBUTTONDOWN, 0, 0);
SendMessage(0x000106b2, WM_LBUTTONUP,0, 0);运行的结果是把整个地址栏都单击了,没有单击这个按钮,郁闷啊,到底怎么办,下面是“转到”按钮的截图
[return: MarshalAs(UnmanagedType.Interface)]
public static extern object AccessibleObjectFromWindow(IntPtr hwnd, uint dwObjectID, Guid riid, ref IAccessible ppvObject); [DllImport("Oleacc.dll")]
public static extern int AccessibleChildren(IAccessible paccContainer, int iChildStart, int cChildren, [Out] object[] rgvarChildren, out int pcObtained);Guid iACCUID = new Guid("618736e0-3c3d-11cf-810c-00aa00389b71");
IAccessible iAcc;int parent = FindWindow("Maxthon2_Frame", null);
int child = FindWindowEx(parent, 0, "XTPDockBar", null);
child = FindWindowEx(child, 0, "XTPToolBar", "地址栏");AccessibleObjectFromWindow(child ,-4,iACCUID ,ref iAcc);object[] childrenObj = new object[1];
int count = 0;
AccessibleChildren(iAcc, 1, 1, childrenObj, out count);
IAccessible childIAcc=childIAcc=(IAccessible)childrenObj[0];childIAcc.accDoDefaultAction(0);
第二个参数对应不了uint类型,(uint)-4强制转换也不行
AccessibleObjectFromWindow(child ,4,iACCUID ,ref iAcc);编译运行后,就产生这个错误了!!
对 PInvoke 函数“WzMovApp!WzMovApp.App_Code.API_Maxthon::AccessibleObjectFromWindow”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
我用了你7楼的代码,但是就发生了我10楼发的错误啊,不知道是什么原因
这4个参数怎么来的啊AccessibleObjectFromWindow(child ,-4,iACCUID ,ref iAcc);
其中-4是什么意思,最后的变量根本没赋值啊!!