| /******************************************************************************* |
| * Copyright (c) 2000, 2005 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.swt.snippets; |
| |
| import org.eclipse.swt.*; |
| import org.eclipse.swt.layout.*; |
| import org.eclipse.swt.ole.win32.*; |
| import org.eclipse.swt.widgets.*; |
| |
| /* |
| * Running a script within IE. |
| * |
| * For a list of all SWT example snippets see |
| * http://www.eclipse.org/swt/snippets/ |
| */ |
| |
| public class Snippet187 { |
| |
| public static void main(String[] args) { |
| final Display display = new Display(); |
| Shell shell = new Shell(display); |
| shell.setLayout(new FillLayout()); |
| OleControlSite controlSite; |
| try { |
| OleFrame frame = new OleFrame(shell, SWT.NONE); |
| controlSite = new OleControlSite(frame, SWT.NONE, "Shell.Explorer"); |
| controlSite.doVerb(OLE.OLEIVERB_INPLACEACTIVATE); |
| } catch (SWTError e) { |
| System.out.println("Unable to open activeX control"); |
| return; |
| } |
| |
| // IWebBrowser |
| final OleAutomation webBrowser = new OleAutomation(controlSite); |
| |
| // When the document is loaded, access the document object for the new page |
| // and evalute expression using Script. |
| int DownloadComplete = 104; |
| controlSite.addEventListener(DownloadComplete, new OleListener() { |
| public void handleEvent(OleEvent event) { |
| int[] htmlDocumentID = webBrowser.getIDsOfNames(new String[]{"Document"}); |
| if (htmlDocumentID == null) return; |
| Variant pVarResult = webBrowser.getProperty(htmlDocumentID[0]); |
| if (pVarResult == null || pVarResult.getType() == 0) return; |
| //IHTMLDocument2 |
| OleAutomation htmlDocument = null; |
| try { |
| htmlDocument = pVarResult.getAutomation(); |
| pVarResult.dispose(); |
| |
| int[] scriptID = htmlDocument.getIDsOfNames(new String[]{"Script"}); |
| if (scriptID == null) return; |
| pVarResult = htmlDocument.getProperty(scriptID[0]); |
| if (pVarResult == null || pVarResult.getType() == 0) return; |
| OleAutomation htmlWindow = null; |
| try { |
| //IHTMLWindow2 |
| htmlWindow = pVarResult.getAutomation(); |
| pVarResult.dispose(); |
| int[] evaluateID = htmlWindow.getIDsOfNames(new String[] {"evaluate"}); |
| if (evaluateID == null) return; |
| String expression = "5+Math.sin(9)"; |
| Variant[] rgvarg = new Variant[] {new Variant(expression)}; |
| pVarResult = htmlWindow.invoke(evaluateID[0], rgvarg, null); |
| if (pVarResult == null || pVarResult.getType() == 0) return; |
| System.out.println(expression+" ="+pVarResult.getString()); |
| } finally { |
| htmlWindow.dispose(); |
| } |
| } finally { |
| htmlDocument.dispose(); |
| } |
| } |
| }); |
| |
| // Navigate to a web site |
| int[] ids = webBrowser.getIDsOfNames(new String[]{"Navigate", "URL"}); |
| Variant[] rgvarg = new Variant[] {new Variant("http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet187.html")}; |
| int[] rgdispidNamedArgs = new int[]{ids[1]}; |
| webBrowser.invoke(ids[0], rgvarg, rgdispidNamedArgs); |
| |
| shell.open(); |
| while (!shell.isDisposed()) { |
| if (!display.readAndDispatch()) |
| display.sleep(); |
| } |
| //Remember to release OleAutomation Object |
| webBrowser.dispose(); |
| display.dispose(); |
| |
| } |
| } |