访问安卓版本可以升级吗版本吗

相关热词搜索:
延伸阅读:
主办单位:安徽省岳西县统计局 版权所有 未经许可,不得转载
技术支持:This site in other countries/regions:页面访问升级
紧急大通知:
请狼友们记住新域名:www.
紧急通知:本站老域名全部失效,请用户记下新域名访问本站,拿笔记好。这篇文章中我们介绍了SWT中通过Automation访问IE的方式,但是只是简单的URL导航,没有自动填表单、自动提交等功能。我们对其进行了升级,采用了新的操作方式,充分利用了SWT对OLE的支持,裁减掉大量代码。现在可以实现自动填表单、自动提交等功能。不过暂时还无法响应IE的事件。
核心代码如下:
import org.eclipse.swt.SWTE
import org.eclipse.swt.internal.;
import org.eclipse.swt.internal.ole.win32.GUID;
import org.eclipse.swt.internal.ole.win32.IU
import org.eclipse.swt.ole.win32.OLE;
import org.eclipse.swt.ole.win32.OleClientS
import org.eclipse.
&* @author 杨中科
public class AutomationClientSite extends OleClientSite
&public AutomationClientSite(Composite parent, int style, String progId)
&&super(parent, style);
&&&appClsid = getClassID(progId);
&&&if (appClsid == null)
&&&&OLE.error(OLE.ERROR_INVALID_CLASSID);
&&&//使用CoCreateInstance创建一个进程外Automation服务器
&&&int[] address = new int[1];
&&&int result = COM.CoCreateInstance(getClassID(progId), 0,
&&&&&COM.CLSCTX_INPROC_SERVER | COM.CLSCTX_LOCAL_SERVER,
&&&&&COM.IIDIUnknown, address);
&&&if (result != COM.S_OK)
&&&&OLE.error(OLE.ERROR_CANNOT_CREATE_OBJECT, result);
&&&objIUnknown = new IUnknown(address[0]);
&&} catch (SWTException e)
&&&dispose();
&&&disposeCOMInterfaces();
&protected GUID getClassID(String progId)
&&GUID guid = new GUID();
&&// create a null terminated array of char
&&char[] buffer =
&&if (progId != null)
&&&int count = progId.length();
&&&buffer = new char[count + 1];
&&&progId.getChars(0, count, buffer, 0);
&&if (COM.CLSIDFromProgID(buffer, guid) != COM.S_OK)
&&&int result = COM.CLSIDFromString(buffer, guid);
&&&if (result != COM.S_OK)
&&&&OLE.error(result);
public class OleUtils
&public static int getIdOfName(OleAutomation auto, String name)
&&int[] ret = auto.getIDsOfNames(new String[]{name});
&&return ret[0];
&public static void setProperty(OleAutomation auto, String name,Variant value)
&&int id = getIdOfName(auto, name);
&&auto.setProperty(id, new Variant[]{value});
&public static Variant getProperty(OleAutomation auto, String name)
&&int id = getIdOfName(auto, name);
&&return auto.getProperty(id);
&public static Variant invoke(OleAutomation auto, String name)
&&return invoke(auto,name,new Variant[0]);
&public static Variant invoke(OleAutomation auto, String name,Variant... params)
&&int id = getIdOfName(auto, name);
&&return auto.invoke(id,params);
import org.eclipse.swt.ole.win32.OleA
import org.eclipse.swt.ole.win32.V
&* @author 杨中科
public class HtmlElement
&private OleA
&public HtmlElement(OleAutomation auto)
&&this.auto =
&protected OleAutomation getOleAutomation()
&public void setProperty(String name, Variant value)
&&OleUtils.setProperty(auto, name, value);
&public Variant getPropertyAsVariant(String name)
&&Variant value = OleUtils.getProperty(auto, name);
&public void setProperty(String name, int value)
&&OleUtils.setProperty(auto, name, new Variant(value));
&public int getPropertyAsInt(String name)
&&Variant value = OleUtils.getProperty(auto, name);
&&return value.getInt();
&public void setProperty(String name, boolean value)
&&OleUtils.setProperty(auto, name, new Variant(value));
&public boolean getPropertyAsBool(String name)
&&Variant value = OleUtils.getProperty(auto, name);
&&return value.getBoolean();
&public void setProperty(String name, String value)
&&OleUtils.setProperty(auto, name, new Variant(value));
&public String getPropertyAsString(String name)
&&Variant value = OleUtils.getProperty(auto, name);
&&return value.getString();
&public HtmlElement getPropertyAsHtmlElement(String name)
&&Variant value = OleUtils.getProperty(auto, name);
&&return new HtmlElement(value.getAutomation());
&public Variant invoke(String name,Variant... params)
&&return OleUtils.invoke(auto, name,params);
&public int invoke_Int(String name,Variant... params)
&&return invoke(name,params).getInt();
&public boolean invoke_Bool(String name,Variant... params)
&&return invoke(name,params).getBoolean();
&public String invoke_String(String name,Variant... params)
&&return invoke(name,params).getString();
&public HtmlElement invoke_HtmlElement(String name,Variant... params)
&&return new HtmlElement(invoke(name,params).getAutomation());
import org.eclipse.swt.ole.win32.OleA
import org.eclipse.swt.ole.win32.OleClientS
import org.eclipse.swt.ole.win32.V
&* 更多方法参考MSDN“InternetExplorer Object”文档
&* @author 杨中科
public class IEAutomation extends HtmlElement
&public IEAutomation(OleClientSite clientSite)
&&super(new OleAutomation(clientSite));
&public void setVisible(boolean value)
&&setProperty("Visible", value);
&public boolean isVisible()
&&return getPropertyAsBool("Visible");
&public void setMenuBar(boolean value)
&&setProperty("MenuBar", value);
&public boolean isMenuBar()
&&return getPropertyAsBool("MenuBar");
&public void setStatusBar(boolean value)
&&setProperty("StatusBar", value);
&public boolean isStatusBar()
&&return getPropertyAsBool("StatusBar");
&public void setToolBar(boolean value)
&&setProperty("ToolBar", value);
&public boolean isToolBar()
&&return getPropertyAsBool("ToolBar");
&public int getHWND()
&&return getPropertyAsInt("HWND");
&public String getReadyState()
&&return getPropertyAsString("ReadyState");
&public String getLocationURL()
&&return getPropertyAsString("LocationURL");
&public boolean getBusy()
&&return getPropertyAsBool("Busy");
&public void navigate(String url)
&&invoke("Navigate", new Variant(url));
&public HtmlElement getDocument()
&&return getPropertyAsHtmlElement("Document");
&public String getInnerHtml()
&&HtmlElement document = getPropertyAsHtmlElement("Document");
&&HtmlElement body = document.getPropertyAsHtmlElement("body");
&&return body.getPropertyAsString("innerHtml");
&public HtmlElement getElementById(String id)
&&HtmlElement document = getDocument();
&&return document.invoke_HtmlElement("getElementById", new Variant(id));
&public void quit()
&&invoke("Quit");
使用范例:
&protected void 自动填表()
&&//"kw"为关键字输入框
&&HtmlElement txtKW = ie.getElementById("kw");
&&//自动填表
&&txtKW.setProperty("value", "杨中科");
&&HtmlElement btnSB = ie.getElementById("sb");
&&//自动点击【百度一下】按钮自动提交查询
&&btnSB.invoke("click");
&private void automation() throws Exception
&&OleFrame frame = new OleFrame(composite, SWT.NONE);
&&AutomationClientSite client =
&&&new AutomationClientSite(frame,SWT.NONE,"InternetExplorer.Application");&&&
&&ie = new IEAutomation(client);
&&ie.setVisible(true);
&&ie.setMenuBar(false);
&&ie.setToolBar(false);
&&ie.setStatusBar(false);
&&int hwnd = ie.getHWND();
&&OS.SetParent(hwnd, composite.handle);
&&// 窗口最大化
&&OS.SendMessage(hwnd, OS.WM_SYSCOMMAND, OS.SC_MAXIMIZE, 0);
&&OS.SendMessage(hwnd, OS.WM_ACTIVATE, 0, 0);
&&ie.navigate("");
&&//等待加载完毕,正确的方式应该是在网页onComplete的时候继续执行,但是没弄明白OLE 的EventSink机制怎么搞到SWT中来
&&//所以先凑合着Sleep循环检测getBusy()的值,当不busy的时候再进行后续处理
&&while(ie.getBusy())
&&&Thread.sleep(10);
&&msgBox(ie.getInnerHtml());
&&//"sb"为【百度一下】这个按钮的id
&&HtmlElement btnSB = ie.getElementById("sb");
&&//取value属性
&&String txt = btnSB.getPropertyAsString("value");
&&msgBox("按钮上的文字:"+txt);
&&msgBox("网址:"+ie.getLocationURL());
&&composite.addDisposeListener(new DisposeListener() {
&&&public void widgetDisposed(DisposeEvent e)
&&&&//必须手动指定退出,否则会报异常
&&&&ie.quit();
写得很好,不过我调试了,怎么有些问题,楼主能否把 源码发一份给我, 调试看看效果。 非常感谢
gongyg .&&&&
&re: SWT中通过Automatioin的方式访问IE(升级版)
科哥, 你的例子很好,但是请问一下怎样知道一个IE平时发出哪些事件,在哪里有得查,
client.addListener(new Listener()
public void handleEvent(Event event)
System.out.println(event.type);
System.out.println();
发出来的Type,有没有手册可以查
我的邮箱&#&&&&

我要回帖

更多关于 安卓版本怎么升级 的文章

 

随机推荐