在WebBrowser中打开一个url后,然后用SendMessage发送tab,可以切换URL中的超链接。
你可以打开一个IE,如果一个浏览器,然后按几下TAB看看效果,我就想实现不通过按键盘直接通过sendmessage来实现这个效果!
请在回帖的时候试试你的答案是否可行哦!希望高手多多帮忙,谢谢!

解决方案 »

  1.   


    sendmessage(findwindow(NIL,'IEFTAME'),wm_keydown,table(的值),0);sendmessage(findwindow(NIL,'IEFTAME'),wm_keyup,table(的值),0);
      

  2.   

    我用的是TWebBrowser,不是任何一种浏览器
      

  3.   

    那你就直接找到您webbrowser的句柄发就行了啥如果是别人的程序里面的webbrowser的话你先取它程序的句柄,再举出里面的Internet Explorer_Server的句柄,再发
    顺便说一句,楼主态度不是很好,是不是程序没写出来郁闷了?
      

  4.   

    to brightyang 
    确实郁闷了,你说的方法我试了好几天了,一直不行,所以才上来问的!
    你能回答我很高兴,不过,这个方法行吗?
      

  5.   

    to   brightyang老大,还是不行!
      

  6.   

    我试了,可以的
    你看看你句柄找错没sendmessage(Handle,wm_keydown,$9,$c00f0001);
    sendmessage(Handle,wm_keyup,$9,$c00f0001);
      

  7.   

    webbrowser.handle
    这个是它的句柄,没错吧!
      

  8.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      WebBrowser1.Navigate('http://www.sina.com.cn');
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      handle:Integer;
    begin
        handle := findWindowEx(WebBrowser1.Handle, 0, 'Shell DocObject View', nil);
        handle := findWindowEx(handle, 0, 'Internet Explorer_Server', nil);
        WebBrowser1.SetFocus;
        SendMessage(handle, WM_KEYDOWN, VK_TAB, 0);
        SendMessage(handle, WM_KEYUP, VK_TAB, 0);    SendMessage(handle, WM_KEYDOWN, VK_TAB, 0);
        SendMessage(handle, WM_KEYUP, VK_TAB, 0);    SendMessage(handle, WM_KEYDOWN, VK_TAB, 0);
        SendMessage(handle, WM_KEYUP, VK_TAB, 0);
    end;
      

  9.   

    postmessage(Handle,wm_keydown,$9,$f0001);
    postmessage(Handle,wm_keyup,$9,$c00f0001);
    呵呵,试了,可以了
      

  10.   

    to brightyang 
    非常感谢你的解答,不知道你那为什么可以,呵呵!我上面的代码中的sendmessage已经改为你写的样式了,可是还是不行,请你再帮忙看一下,谢谢了!
      

  11.   

    这就郁闷了。你用的sendmessage还是postmessage是不是用sendmessage有问题?它是同步处理的
      

  12.   

    我这的代码就是上面的代码,我把它写成SendMessage还是PostMessage都没有效果,不知道你那用的控件和我的是否有区别!
      

  13.   

    你当然不行~~
    试了你的代码
    你没有取到句柄
        handle   :=   findWindowEx(WebBrowser1.Handle,   0,  'Shell   DocObject   View' ,   nil);
            handle   :=   findWindowEx(handle,   0, 'Internet   Explorer_Server',   nil);
            WebBrowser1.SetFocus;
            showmessage(inttostr(handle));
    句柄为0
    我用的EnumChildWindows(hwnd,@Callwebhandle,0); 来取的canwebhandle是自已定义的
      

  14.   

    to brightyang:Shell Embedding/1115796
    Shell DocObject View/3999594
    Internet Explorer_Server/67762应该是给哪个类发消息?是Internet Explorer_Server吗?其实在我这
            handle   :=   findWindowEx(WebBrowser1.Handle,   0,   "Shell   DocObject   View ",   nil); 
            handle   :=   findWindowEx(handle,   0,   "Internet   Explorer_Server ",   nil); 
    找到的句柄都是正确的
      

  15.   

    Internet   Explorer_Server 这个.你那个代码应该是没问题
    但是把它跟踪出来的是0
      

  16.   

    可能是WebBrowser获得焦点的方法不对,看看下面的文章
    http://www.lihuasoft.net/article/show.php?id=2906