我要做个小程序,是将遨游的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不进行换行。请高手解答,谢谢啦

解决方案 »

  1.   

    可试:直接给WebBrowser发送消息查看MSDN for VC6.0
    IWebBrowser::Navigate
      

  2.   

    多谢2位的回答,AccExplorer32.exe我下了,但不会用,我怎么用代码找到句柄啊,以我这种形试,给下代码,谢谢啦!
      

  3.   

    我用AccExplorer32.exe找到了那个转到的按钮,按DO IT可以单击这个按钮,但代码我这写
    SendMessage(0x000106b2, WM_LBUTTONDOWN, 0, 0);
    SendMessage(0x000106b2, WM_LBUTTONUP,0, 0);运行的结果是把整个地址栏都单击了,没有单击这个按钮,郁闷啊,到底怎么办,下面是“转到”按钮的截图
      

  4.   

    google "AccessibleObjectFromWindow"获取IAcc接口,调用accDoDefaultAction方法
      

  5.   

    我未接触过这方面....怎么获取IAcc接口啊,可以具体给点代码吗?我是新手,不好意思,麻烦你了!谢谢
      

  6.   

    添加Accessibility引用. [DllImport("oleacc.dll", ExactSpelling = true, PreserveSig = false)]
    [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);
      

  7.   

    能不能对代码注释一下啊,实在看不懂,在引用的时候,发现AccessibleObjectFromWindow(child ,-4,iACCUID ,ref iAcc);
    第二个参数对应不了uint类型,(uint)-4强制转换也不行
      

  8.   

    你把声明改成int...其他你google "Microsoft Active Accseeibility"
      

  9.   

    AccessibleObjectFromWindow(child ,-4,iACCUID ,ref iAcc); 第四个参数,报错,引用局部未赋值的变量。后来为了成功编译我改成IAccessible iAcc=null;
    AccessibleObjectFromWindow(child ,4,iACCUID ,ref iAcc);编译运行后,就产生这个错误了!!
    对 PInvoke 函数“WzMovApp!WzMovApp.App_Code.API_Maxthon::AccessibleObjectFromWindow”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
      

  10.   

    打错了, "Microsoft Active Accessibility"
      

  11.   

    还是一头雾水,不知道从哪下手,以前没接触过Microsoft Active Accessibility,上面的代码到底上什么意思?
      

  12.   

    http://tech.ddvip.com/2006-04/11444413204320.html去看看这篇文章.
      

  13.   

    看了但这太复杂了吧,而且是VC的啊。。它跟API有什么不同啊。。我知道大概的意思,但就是不知道怎么用郁闷!!T_T我太蠢了。
      

  14.   

    这个... 那篇文章是用C++调API. 你只需要改成C#调API, 不要告诉我你连C++的语法都看不懂...参照我7楼的代码.
      

  15.   

    确实我没学C++,部分看不懂...-。-!
    我用了你7楼的代码,但是就发生了我10楼发的错误啊,不知道是什么原因
    这4个参数怎么来的啊AccessibleObjectFromWindow(child ,-4,iACCUID ,ref iAcc); 
    其中-4是什么意思,最后的变量根本没赋值啊!!
      

  16.   

    C#适合做数据库相关, 如果你要做系统紧密结合的程序, 必须要懂C++.参数什么意思, MSDN搜索一下就清楚了.这个函数堆栈不平衡不影响你下一步程序运行.
      

  17.   

    也就是说,不理那个错误,继续运行??好像不行哦是了,有什么关于C# API的书啊,推荐一下,谢谢了!
      

  18.   

    你想了解Windows API?那就是MSDN, 不论什么书, 都是对MSDN进行剪贴出来的.