<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FSWT%2FWIN32</id>
		<title>Java Tutorial/SWT/WIN32 - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FSWT%2FWIN32"/>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java_Tutorial/SWT/WIN32&amp;action=history"/>
		<updated>2026-04-06T22:51:03Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://jexp.ru/index.php?title=Java_Tutorial/SWT/WIN32&amp;diff=3091&amp;oldid=prev</id>
		<title> в 17:44, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java_Tutorial/SWT/WIN32&amp;diff=3091&amp;oldid=prev"/>
				<updated>2010-05-31T17:44:26Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 17:44, 31 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://jexp.ru/index.php?title=Java_Tutorial/SWT/WIN32&amp;diff=3092&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java_Tutorial/SWT/WIN32&amp;diff=3092&amp;oldid=prev"/>
				<updated>2010-05-31T15:20:35Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== 17. Add System Setting Change Listener ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import org.eclipse.swt.SWT;&lt;br /&gt;
import org.eclipse.swt.widgets.Display;&lt;br /&gt;
import org.eclipse.swt.widgets.Event;&lt;br /&gt;
import org.eclipse.swt.widgets.Listener;&lt;br /&gt;
import org.eclipse.swt.widgets.Shell;&lt;br /&gt;
public class SystemSettingChangeListener {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    final Display display = new Display();&lt;br /&gt;
    Shell shell = new Shell(display);&lt;br /&gt;
    display.addListener(SWT.Settings, new Listener() {&lt;br /&gt;
      public void handleEvent(Event event) {&lt;br /&gt;
        System.out.println(&amp;quot;Setting changed&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    while (!shell.isDisposed()) {&lt;br /&gt;
      if (!display.readAndDispatch())&lt;br /&gt;
        display.sleep();&lt;br /&gt;
    }&lt;br /&gt;
    display.dispose();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 17. Detect a system settings change ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*******************************************************************************&lt;br /&gt;
 * Copyright (c) 2000, 2006 IBM Corporation and others.&lt;br /&gt;
 * All rights reserved. This program and the accompanying materials&lt;br /&gt;
 * are made available under the terms of the Eclipse Public License v1.0&lt;br /&gt;
 * which accompanies this distribution, and is available at&lt;br /&gt;
 * http://www.eclipse.org/legal/epl-v10.html&lt;br /&gt;
 *&lt;br /&gt;
 * Contributors:&lt;br /&gt;
 *     IBM Corporation - initial API and implementation&lt;br /&gt;
 *******************************************************************************/&lt;br /&gt;
/* &lt;br /&gt;
 * example snippet: detect a system settings change&lt;br /&gt;
 *&lt;br /&gt;
 * For a list of all SWT example snippets see&lt;br /&gt;
 * http://www.eclipse.org/swt/snippets/&lt;br /&gt;
 * &lt;br /&gt;
 * @since 3.2&lt;br /&gt;
 */&lt;br /&gt;
import org.eclipse.swt.SWT;&lt;br /&gt;
import org.eclipse.swt.graphics.Color;&lt;br /&gt;
import org.eclipse.swt.layout.GridData;&lt;br /&gt;
import org.eclipse.swt.layout.GridLayout;&lt;br /&gt;
import org.eclipse.swt.widgets.Display;&lt;br /&gt;
import org.eclipse.swt.widgets.Event;&lt;br /&gt;
import org.eclipse.swt.widgets.Label;&lt;br /&gt;
import org.eclipse.swt.widgets.Listener;&lt;br /&gt;
import org.eclipse.swt.widgets.Shell;&lt;br /&gt;
import org.eclipse.swt.widgets.Table;&lt;br /&gt;
import org.eclipse.swt.widgets.TableColumn;&lt;br /&gt;
import org.eclipse.swt.widgets.TableItem;&lt;br /&gt;
public class DetectSystemSettingChange {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    final Display display = new Display();&lt;br /&gt;
    final Shell shell = new Shell(display);&lt;br /&gt;
    shell.setText(&amp;quot;The SWT.Settings Event&amp;quot;);&lt;br /&gt;
    shell.setLayout(new GridLayout());&lt;br /&gt;
    Label label = new Label(shell, SWT.WRAP);&lt;br /&gt;
    label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));&lt;br /&gt;
    label.setText(&amp;quot;Change a system setting and the table below will be updated.&amp;quot;);&lt;br /&gt;
    final Table table = new Table(shell, SWT.BORDER);&lt;br /&gt;
    table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));&lt;br /&gt;
    TableColumn column = new TableColumn(table, SWT.NONE);&lt;br /&gt;
    column = new TableColumn(table, SWT.NONE);&lt;br /&gt;
    column.setWidth(150);&lt;br /&gt;
    column = new TableColumn(table, SWT.NONE);&lt;br /&gt;
    for (int i = 0; i &amp;lt; colorIds.length; i++) {&lt;br /&gt;
      TableItem item = new TableItem(table, SWT.NONE);&lt;br /&gt;
      Color color = display.getSystemColor(colorIds[i]);&lt;br /&gt;
      item.setText(0, colorNames[i]);&lt;br /&gt;
      item.setBackground(1, color);&lt;br /&gt;
      item.setText(2, color.toString());&lt;br /&gt;
    }&lt;br /&gt;
    TableColumn[] columns = table.getColumns();&lt;br /&gt;
    columns[0].pack();&lt;br /&gt;
    columns[2].pack();&lt;br /&gt;
    display.addListener(SWT.Settings, new Listener() {&lt;br /&gt;
      public void handleEvent(Event event) {&lt;br /&gt;
        for (int i = 0; i &amp;lt; colorIds.length; i++) {&lt;br /&gt;
          Color color = display.getSystemColor(colorIds[i]);&lt;br /&gt;
          TableItem item = table.getItem(i);&lt;br /&gt;
          item.setBackground(1, color);&lt;br /&gt;
        }&lt;br /&gt;
        TableColumn[] columns = table.getColumns();&lt;br /&gt;
        columns[0].pack();&lt;br /&gt;
        columns[2].pack();&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    shell.pack();&lt;br /&gt;
    shell.open();&lt;br /&gt;
    while (!shell.isDisposed()) {&lt;br /&gt;
      if (!display.readAndDispatch())&lt;br /&gt;
        display.sleep();&lt;br /&gt;
    }&lt;br /&gt;
    display.dispose();&lt;br /&gt;
  }&lt;br /&gt;
  static int[] colorIds = new int[] { SWT.COLOR_INFO_BACKGROUND, SWT.COLOR_INFO_FOREGROUND,&lt;br /&gt;
      SWT.COLOR_LIST_BACKGROUND, SWT.COLOR_LIST_FOREGROUND, SWT.COLOR_LIST_SELECTION,&lt;br /&gt;
      SWT.COLOR_LIST_SELECTION_TEXT, SWT.COLOR_TITLE_BACKGROUND,&lt;br /&gt;
      SWT.COLOR_TITLE_BACKGROUND_GRADIENT, SWT.COLOR_TITLE_FOREGROUND,&lt;br /&gt;
      SWT.COLOR_TITLE_INACTIVE_BACKGROUND, SWT.COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT,&lt;br /&gt;
      SWT.COLOR_TITLE_INACTIVE_FOREGROUND, SWT.COLOR_WIDGET_BACKGROUND, SWT.COLOR_WIDGET_BORDER,&lt;br /&gt;
      SWT.COLOR_WIDGET_DARK_SHADOW, SWT.COLOR_WIDGET_FOREGROUND, SWT.COLOR_WIDGET_HIGHLIGHT_SHADOW,&lt;br /&gt;
      SWT.COLOR_WIDGET_LIGHT_SHADOW, SWT.COLOR_WIDGET_NORMAL_SHADOW, };&lt;br /&gt;
  static String[] colorNames = new String[] { &amp;quot;SWT.COLOR_INFO_BACKGROUND&amp;quot;,&lt;br /&gt;
      &amp;quot;SWT.COLOR_INFO_FOREGROUND&amp;quot;, &amp;quot;SWT.COLOR_LIST_BACKGROUND&amp;quot;, &amp;quot;SWT.COLOR_LIST_FOREGROUND&amp;quot;,&lt;br /&gt;
      &amp;quot;SWT.COLOR_LIST_SELECTION&amp;quot;, &amp;quot;SWT.COLOR_LIST_SELECTION_TEXT&amp;quot;, &amp;quot;SWT.COLOR_TITLE_BACKGROUND&amp;quot;,&lt;br /&gt;
      &amp;quot;SWT.COLOR_TITLE_BACKGROUND_GRADIENT&amp;quot;, &amp;quot;SWT.COLOR_TITLE_FOREGROUND&amp;quot;,&lt;br /&gt;
      &amp;quot;SWT.COLOR_TITLE_INACTIVE_BACKGROUND&amp;quot;, &amp;quot;SWT.COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT&amp;quot;,&lt;br /&gt;
      &amp;quot;SWT.COLOR_TITLE_INACTIVE_FOREGROUND&amp;quot;, &amp;quot;SWT.COLOR_WIDGET_BACKGROUND&amp;quot;,&lt;br /&gt;
      &amp;quot;SWT.COLOR_WIDGET_BORDER&amp;quot;, &amp;quot;SWT.COLOR_WIDGET_DARK_SHADOW&amp;quot;, &amp;quot;SWT.COLOR_WIDGET_FOREGROUND&amp;quot;,&lt;br /&gt;
      &amp;quot;SWT.COLOR_WIDGET_HIGHLIGHT_SHADOW&amp;quot;, &amp;quot;SWT.COLOR_WIDGET_LIGHT_SHADOW&amp;quot;,&lt;br /&gt;
      &amp;quot;SWT.COLOR_WIDGET_NORMAL_SHADOW&amp;quot;, };&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 17. Embed Word in an applet (win32 only) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*******************************************************************************&lt;br /&gt;
 * Copyright (c) 2000, 2004 IBM Corporation and others.&lt;br /&gt;
 * All rights reserved. This program and the accompanying materials&lt;br /&gt;
 * are made available under the terms of the Eclipse Public License v1.0&lt;br /&gt;
 * which accompanies this distribution, and is available at&lt;br /&gt;
 * http://www.eclipse.org/legal/epl-v10.html&lt;br /&gt;
 *&lt;br /&gt;
 * Contributors:&lt;br /&gt;
 *     IBM Corporation - initial API and implementation&lt;br /&gt;
 *******************************************************************************/&lt;br /&gt;
//package org.eclipse.swt.snippets;&lt;br /&gt;
/*&lt;br /&gt;
 * example snippet: Embed Word in an applet (win32 only)&lt;br /&gt;
 *&lt;br /&gt;
 * For a list of all SWT example snippets see&lt;br /&gt;
 * http://www.eclipse.org/swt/snippets/&lt;br /&gt;
 * &lt;br /&gt;
 * @since 3.0&lt;br /&gt;
 */&lt;br /&gt;
import java.applet.Applet;&lt;br /&gt;
public class MainClass extends Applet {&lt;br /&gt;
  org.eclipse.swt.widgets.Display display;&lt;br /&gt;
  org.eclipse.swt.widgets.Shell swtParent;&lt;br /&gt;
  java.awt.Canvas awtParent;&lt;br /&gt;
  public void init() {&lt;br /&gt;
    Thread thread = new Thread(new Runnable() {&lt;br /&gt;
      public void run() {&lt;br /&gt;
        setLayout(new java.awt.GridLayout(1, 1));&lt;br /&gt;
        awtParent = new java.awt.Canvas();&lt;br /&gt;
        add(awtParent);&lt;br /&gt;
        display = new org.eclipse.swt.widgets.Display();&lt;br /&gt;
        swtParent = org.eclipse.swt.awt.SWT_AWT.new_Shell(display, awtParent);&lt;br /&gt;
        swtParent.setLayout(new org.eclipse.swt.layout.FillLayout());&lt;br /&gt;
        org.eclipse.swt.ole.win32.OleFrame frame = new org.eclipse.swt.ole.win32.OleFrame(&lt;br /&gt;
            swtParent, org.eclipse.swt.SWT.NONE);&lt;br /&gt;
        org.eclipse.swt.ole.win32.OleClientSite site;&lt;br /&gt;
        try {&lt;br /&gt;
          site = new org.eclipse.swt.ole.win32.OleClientSite(frame, org.eclipse.swt.SWT.NONE,&lt;br /&gt;
              &amp;quot;Word.Document&amp;quot;);&lt;br /&gt;
        } catch (org.eclipse.swt.SWTException e) {&lt;br /&gt;
          String str = &amp;quot;Create OleClientSite Error&amp;quot; + e.toString();&lt;br /&gt;
          System.out.println(str);&lt;br /&gt;
          return;&lt;br /&gt;
        }&lt;br /&gt;
        setSize(500, 500);&lt;br /&gt;
        validate();&lt;br /&gt;
        site.doVerb(org.eclipse.swt.ole.win32.OLE.OLEIVERB_SHOW);&lt;br /&gt;
        while (swtParent != null &amp;amp;&amp;amp; !swtParent.isDisposed()) {&lt;br /&gt;
          if (!display.readAndDispatch())&lt;br /&gt;
            display.sleep();&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    thread.start();&lt;br /&gt;
  }&lt;br /&gt;
  public void stop() {&lt;br /&gt;
    if (display != null &amp;amp;&amp;amp; !display.isDisposed()) {&lt;br /&gt;
      display.syncExec(new Runnable() {&lt;br /&gt;
        public void run() {&lt;br /&gt;
          if (swtParent != null &amp;amp;&amp;amp; !swtParent.isDisposed())&lt;br /&gt;
            swtParent.dispose();&lt;br /&gt;
          swtParent = null;&lt;br /&gt;
          display.dispose();&lt;br /&gt;
          display = null;&lt;br /&gt;
        }&lt;br /&gt;
      });&lt;br /&gt;
      remove(awtParent);&lt;br /&gt;
      awtParent = null;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 17. How to access About, Preferences and Quit menus on carbon. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*******************************************************************************&lt;br /&gt;
 * Copyright (c) 2000, 2005 IBM Corporation and others.&lt;br /&gt;
 * All rights reserved. This program and the accompanying materials&lt;br /&gt;
 * are made available under the terms of the Eclipse Public License v1.0&lt;br /&gt;
 * which accompanies this distribution, and is available at&lt;br /&gt;
 * http://www.eclipse.org/legal/epl-v10.html&lt;br /&gt;
 *&lt;br /&gt;
 * Contributors:&lt;br /&gt;
 *     IBM Corporation - initial API and implementation&lt;br /&gt;
 *******************************************************************************/&lt;br /&gt;
/*&lt;br /&gt;
 * How to access About, Preferences and Quit menus on carbon.&lt;br /&gt;
 * NOTE: This snippet uses internal SWT packages that are&lt;br /&gt;
 * subject to change without notice.&lt;br /&gt;
 * &lt;br /&gt;
 * For a list of all SWT example snippets see&lt;br /&gt;
 * http://www.eclipse.org/swt/snippets/&lt;br /&gt;
 */&lt;br /&gt;
import org.eclipse.swt.internal.*;&lt;br /&gt;
import org.eclipse.swt.internal.carbon.*;&lt;br /&gt;
import org.eclipse.swt.*;&lt;br /&gt;
import org.eclipse.swt.widgets.*;&lt;br /&gt;
public class Snippet178 {&lt;br /&gt;
  private static final int kHICommandPreferences = (&amp;quot;p&amp;quot; &amp;lt;&amp;lt; 24) + (&amp;quot;r&amp;quot; &amp;lt;&amp;lt; 16) + (&amp;quot;e&amp;quot; &amp;lt;&amp;lt; 8) + &amp;quot;f&amp;quot;;&lt;br /&gt;
  private static final int kHICommandAbout = (&amp;quot;a&amp;quot; &amp;lt;&amp;lt; 24) + (&amp;quot;b&amp;quot; &amp;lt;&amp;lt; 16) + (&amp;quot;o&amp;quot; &amp;lt;&amp;lt; 8) + &amp;quot;u&amp;quot;;&lt;br /&gt;
  private static final int kHICommandServices = (&amp;quot;s&amp;quot; &amp;lt;&amp;lt; 24) + (&amp;quot;e&amp;quot; &amp;lt;&amp;lt; 16) + (&amp;quot;r&amp;quot; &amp;lt;&amp;lt; 8) + &amp;quot;v&amp;quot;;&lt;br /&gt;
  public static void main(String[] arg) {&lt;br /&gt;
    Display.setAppName(&amp;quot;AppMenu&amp;quot;); // sets name in Dock&lt;br /&gt;
    Display display = new Display();&lt;br /&gt;
    hookApplicationMenu(display, &amp;quot;About AppMenu&amp;quot;);&lt;br /&gt;
    Shell shell = new Shell(display);&lt;br /&gt;
    shell.setText(&amp;quot;Main Window&amp;quot;);&lt;br /&gt;
    shell.open();&lt;br /&gt;
    while (!shell.isDisposed())&lt;br /&gt;
      if (!display.readAndDispatch())&lt;br /&gt;
        display.sleep();&lt;br /&gt;
    display.dispose();&lt;br /&gt;
  }&lt;br /&gt;
  static void hookApplicationMenu(Display display, final String aboutName) {&lt;br /&gt;
    // Callback target&lt;br /&gt;
    Object target = new Object() {&lt;br /&gt;
      int commandProc(int nextHandler, int theEvent, int userData) {&lt;br /&gt;
        if (OS.GetEventKind(theEvent) == OS.kEventProcessCommand) {&lt;br /&gt;
          HICommand command = new HICommand();&lt;br /&gt;
          OS.GetEventParameter(theEvent, OS.kEventParamDirectObject, OS.typeHICommand, null,&lt;br /&gt;
              HICommand.sizeof, null, command);&lt;br /&gt;
          switch (command.rumandID) {&lt;br /&gt;
          case kHICommandPreferences:&lt;br /&gt;
            return handleCommand(&amp;quot;Preferences&amp;quot;); //$NON-NLS-1$&lt;br /&gt;
          case kHICommandAbout:&lt;br /&gt;
            return handleCommand(aboutName);&lt;br /&gt;
          default:&lt;br /&gt;
            break;&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        return OS.eventNotHandledErr;&lt;br /&gt;
      }&lt;br /&gt;
      int handleCommand(String command) {&lt;br /&gt;
        Shell shell = new Shell();&lt;br /&gt;
        MessageBox preferences = new MessageBox(shell, SWT.ICON_WARNING);&lt;br /&gt;
        preferences.setText(command);&lt;br /&gt;
        preferences.open();&lt;br /&gt;
        shell.dispose();&lt;br /&gt;
        return OS.noErr;&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
    final Callback commandCallback = new Callback(target, &amp;quot;commandProc&amp;quot;, 3); //$NON-NLS-1$&lt;br /&gt;
    int commandProc = commandCallback.getAddress();&lt;br /&gt;
    if (commandProc == 0) {&lt;br /&gt;
      commandCallback.dispose();&lt;br /&gt;
      return; // give up&lt;br /&gt;
    }&lt;br /&gt;
    // Install event handler for commands&lt;br /&gt;
    int[] mask = new int[] { OS.kEventClassCommand, OS.kEventProcessCommand };&lt;br /&gt;
    OS.InstallEventHandler(OS.GetApplicationEventTarget(), commandProc, mask.length / 2, mask, 0,&lt;br /&gt;
        null);&lt;br /&gt;
    // create About ... menu command&lt;br /&gt;
    int[] outMenu = new int[1];&lt;br /&gt;
    short[] outIndex = new short[1];&lt;br /&gt;
    if (OS.GetIndMenuItemWithCommandID(0, kHICommandPreferences, 1, outMenu, outIndex) == OS.noErr&lt;br /&gt;
        &amp;amp;&amp;amp; outMenu[0] != 0) {&lt;br /&gt;
      int menu = outMenu[0];&lt;br /&gt;
      int l = aboutName.length();&lt;br /&gt;
      char buffer[] = new char[l];&lt;br /&gt;
      aboutName.getChars(0, l, buffer, 0);&lt;br /&gt;
      int str = OS.CFStringCreateWithCharacters(OS.kCFAllocatorDefault, buffer, l);&lt;br /&gt;
      OS.InsertMenuItemTextWithCFString(menu, str, (short) 0, 0, kHICommandAbout);&lt;br /&gt;
      OS.CFRelease(str);&lt;br /&gt;
      // add separator between About &amp;amp; Preferences&lt;br /&gt;
      OS.InsertMenuItemTextWithCFString(menu, 0, (short) 1, OS.kMenuItemAttrSeparator, 0);&lt;br /&gt;
      // enable pref menu&lt;br /&gt;
      OS.EnableMenuCommand(menu, kHICommandPreferences);&lt;br /&gt;
      // disable services menu&lt;br /&gt;
      OS.DisableMenuCommand(menu, kHICommandServices);&lt;br /&gt;
    }&lt;br /&gt;
    // schedule disposal of callback object&lt;br /&gt;
    display.disposeExec(new Runnable() {&lt;br /&gt;
      public void run() {&lt;br /&gt;
        commandCallback.dispose();&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 17. Invoke an external batch file ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import org.eclipse.swt.program.Program;&lt;br /&gt;
import org.eclipse.swt.widgets.Display;&lt;br /&gt;
public class ExternalBatchFileInvoke {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    Display display = new Display();&lt;br /&gt;
    Program.launch(&amp;quot;c:\\cygwin\\cygwin.bat&amp;quot;);&lt;br /&gt;
    display.dispose();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 17. Invoke the system text editor on autoexec.bat ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import org.eclipse.swt.program.Program;&lt;br /&gt;
import org.eclipse.swt.widgets.Display;&lt;br /&gt;
public class InvokeSystemTextEditor {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    Display display = new Display();&lt;br /&gt;
    Program p = Program.findProgram(&amp;quot;.txt&amp;quot;);&lt;br /&gt;
    if (p != null)&lt;br /&gt;
      p.execute(&amp;quot;c:\\autoexec.bat&amp;quot;); // Windows-specific filename&lt;br /&gt;
    display.dispose();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 17. Load System File Icon ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import org.eclipse.swt.SWT;&lt;br /&gt;
import org.eclipse.swt.graphics.Image;&lt;br /&gt;
import org.eclipse.swt.graphics.ImageData;&lt;br /&gt;
import org.eclipse.swt.layout.RowLayout;&lt;br /&gt;
import org.eclipse.swt.program.Program;&lt;br /&gt;
import org.eclipse.swt.widgets.Display;&lt;br /&gt;
import org.eclipse.swt.widgets.Label;&lt;br /&gt;
import org.eclipse.swt.widgets.Shell;&lt;br /&gt;
public class SystemFileIconLoad {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    Display display = new Display();&lt;br /&gt;
    Shell shell = new Shell(display);&lt;br /&gt;
    shell.setLayout(new RowLayout());&lt;br /&gt;
    Label label = new Label(shell, SWT.NONE);&lt;br /&gt;
    Image image = null;&lt;br /&gt;
    &lt;br /&gt;
    Program p = Program.findProgram(&amp;quot;.txt&amp;quot;);&lt;br /&gt;
    ImageData data = p.getImageData();&lt;br /&gt;
    image = new Image(display, data);&lt;br /&gt;
    label.setImage(image);&lt;br /&gt;
    p = Program.findProgram(&amp;quot;.bmp&amp;quot;);&lt;br /&gt;
    data = p.getImageData();&lt;br /&gt;
    image = new Image(display, data);&lt;br /&gt;
    label = new Label(shell, SWT.NONE);&lt;br /&gt;
    label.setImage(image);&lt;br /&gt;
    p = Program.findProgram(&amp;quot;.doc&amp;quot;);&lt;br /&gt;
    data = p.getImageData();&lt;br /&gt;
    image = new Image(display, data);&lt;br /&gt;
    label = new Label(shell, SWT.NONE);&lt;br /&gt;
    label.setImage(image);&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    label.pack();&lt;br /&gt;
    shell.pack();&lt;br /&gt;
    shell.open();&lt;br /&gt;
    while (!shell.isDisposed()) {&lt;br /&gt;
      if (!display.readAndDispatch())&lt;br /&gt;
        display.sleep();&lt;br /&gt;
    }&lt;br /&gt;
    if (image != null)&lt;br /&gt;
      image.dispose();&lt;br /&gt;
    display.dispose();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 17. OLE and ActiveX: browse the typelibinfo for a program id (win32 only) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*******************************************************************************&lt;br /&gt;
 * Copyright (c) 2000, 2004 IBM Corporation and others.&lt;br /&gt;
 * All rights reserved. This program and the accompanying materials&lt;br /&gt;
 * are made available under the terms of the Eclipse Public License v1.0&lt;br /&gt;
 * which accompanies this distribution, and is available at&lt;br /&gt;
 * http://www.eclipse.org/legal/epl-v10.html&lt;br /&gt;
 *&lt;br /&gt;
 * Contributors:&lt;br /&gt;
 *     IBM Corporation - initial API and implementation&lt;br /&gt;
 *******************************************************************************/&lt;br /&gt;
//package org.eclipse.swt.snippets;&lt;br /&gt;
/*&lt;br /&gt;
 * OLE and ActiveX example snippet: browse the typelibinfo for a program id (win32 only)&lt;br /&gt;
 * NOTE: This snippet uses internal SWT packages that are&lt;br /&gt;
 * subject to change without notice.&lt;br /&gt;
 *&lt;br /&gt;
 * For a list of all SWT example snippets see&lt;br /&gt;
 * http://www.eclipse.org/swt/snippets/&lt;br /&gt;
 */&lt;br /&gt;
import org.eclipse.swt.SWT;&lt;br /&gt;
import org.eclipse.swt.SWTException;&lt;br /&gt;
import org.eclipse.swt.internal.ole.win32.TYPEATTR;&lt;br /&gt;
import org.eclipse.swt.ole.win32.OLE;&lt;br /&gt;
import org.eclipse.swt.ole.win32.OleAutomation;&lt;br /&gt;
import org.eclipse.swt.ole.win32.OleControlSite;&lt;br /&gt;
import org.eclipse.swt.ole.win32.OleFrame;&lt;br /&gt;
import org.eclipse.swt.ole.win32.OleFunctionDescription;&lt;br /&gt;
import org.eclipse.swt.ole.win32.OlePropertyDescription;&lt;br /&gt;
import org.eclipse.swt.widgets.Display;&lt;br /&gt;
import org.eclipse.swt.widgets.Shell;&lt;br /&gt;
public class OLEActiveXTypeLib {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    if (args.length == 0) {&lt;br /&gt;
      System.out.println(&amp;quot;Usage: java Main &amp;lt;program id&amp;gt;&amp;quot;);&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    String progID = args[0];&lt;br /&gt;
    Display display = new Display();&lt;br /&gt;
    Shell shell = new Shell(display);&lt;br /&gt;
    OleFrame frame = new OleFrame(shell, SWT.NONE);&lt;br /&gt;
    OleControlSite site = null;&lt;br /&gt;
    OleAutomation auto = null;&lt;br /&gt;
    try {&lt;br /&gt;
      site = new OleControlSite(frame, SWT.NONE, progID);&lt;br /&gt;
      auto = new OleAutomation(site);&lt;br /&gt;
    } catch (SWTException ex) {&lt;br /&gt;
      System.out.println(&amp;quot;Unable to open type library for &amp;quot; + progID);&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    printTypeInfo(auto);&lt;br /&gt;
    auto.dispose();&lt;br /&gt;
    shell.dispose();&lt;br /&gt;
    display.dispose();&lt;br /&gt;
  }&lt;br /&gt;
  private static void printTypeInfo(OleAutomation auto) {&lt;br /&gt;
    TYPEATTR typeattr = auto.getTypeInfoAttributes();&lt;br /&gt;
    if (typeattr != null) {&lt;br /&gt;
      if (typeattr.cFuncs &amp;gt; 0)&lt;br /&gt;
        System.out.println(&amp;quot;Functions :\n&amp;quot;);&lt;br /&gt;
      for (int i = 0; i &amp;lt; typeattr.cFuncs; i++) {&lt;br /&gt;
        OleFunctionDescription data = auto.getFunctionDescription(i);&lt;br /&gt;
        String argList = &amp;quot;&amp;quot;;&lt;br /&gt;
        int firstOptionalArgIndex = data.args.length - data.optionalArgCount;&lt;br /&gt;
        for (int j = 0; j &amp;lt; data.args.length; j++) {&lt;br /&gt;
          argList += &amp;quot;[&amp;quot;;&lt;br /&gt;
          if (j &amp;gt;= firstOptionalArgIndex)&lt;br /&gt;
            argList += &amp;quot;optional, &amp;quot;;&lt;br /&gt;
          argList += getDirection(data.args[j].flags) + &amp;quot;] &amp;quot; + getTypeName(data.args[j].type) + &amp;quot; &amp;quot;&lt;br /&gt;
              + data.args[j].name;&lt;br /&gt;
          if (j &amp;lt; data.args.length - 1)&lt;br /&gt;
            argList += &amp;quot;, &amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        System.out.println(getInvokeKind(data.invokeKind) + &amp;quot; (id = &amp;quot; + data.id + &amp;quot;) : &amp;quot;&lt;br /&gt;
            + &amp;quot;\n\tSignature   : &amp;quot; + getTypeName(data.returnType) + &amp;quot; &amp;quot; + data.name + &amp;quot;(&amp;quot; + argList&lt;br /&gt;
            + &amp;quot;)&amp;quot; + &amp;quot;\n\tDescription : &amp;quot; + data.documentation + &amp;quot;\n\tHelp File   : &amp;quot;&lt;br /&gt;
            + data.helpFile + &amp;quot;\n&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      if (typeattr.cVars &amp;gt; 0)&lt;br /&gt;
        System.out.println(&amp;quot;\n\nVariables  :\n&amp;quot;);&lt;br /&gt;
      for (int i = 0; i &amp;lt; typeattr.cVars; i++) {&lt;br /&gt;
        OlePropertyDescription data = auto.getPropertyDescription(i);&lt;br /&gt;
        System.out.println(&amp;quot;PROPERTY (id = &amp;quot; + data.id + &amp;quot;) :&amp;quot; + &amp;quot;\n\tName : &amp;quot; + data.name&lt;br /&gt;
            + &amp;quot;\n\tType : &amp;quot; + getTypeName(data.type) + &amp;quot;\n&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  private static String getTypeName(int type) {&lt;br /&gt;
    switch (type) {&lt;br /&gt;
    case OLE.VT_BOOL:&lt;br /&gt;
      return &amp;quot;boolean&amp;quot;;&lt;br /&gt;
    case OLE.VT_R4:&lt;br /&gt;
      return &amp;quot;float&amp;quot;;&lt;br /&gt;
    case OLE.VT_R8:&lt;br /&gt;
      return &amp;quot;double&amp;quot;;&lt;br /&gt;
    case OLE.VT_I4:&lt;br /&gt;
      return &amp;quot;int&amp;quot;;&lt;br /&gt;
    case OLE.VT_DISPATCH:&lt;br /&gt;
      return &amp;quot;IDispatch&amp;quot;;&lt;br /&gt;
    case OLE.VT_UNKNOWN:&lt;br /&gt;
      return &amp;quot;IUnknown&amp;quot;;&lt;br /&gt;
    case OLE.VT_I2:&lt;br /&gt;
      return &amp;quot;short&amp;quot;;&lt;br /&gt;
    case OLE.VT_BSTR:&lt;br /&gt;
      return &amp;quot;String&amp;quot;;&lt;br /&gt;
    case OLE.VT_VARIANT:&lt;br /&gt;
      return &amp;quot;Variant&amp;quot;;&lt;br /&gt;
    case OLE.VT_CY:&lt;br /&gt;
      return &amp;quot;Currency&amp;quot;;&lt;br /&gt;
    case OLE.VT_DATE:&lt;br /&gt;
      return &amp;quot;Date&amp;quot;;&lt;br /&gt;
    case OLE.VT_UI1:&lt;br /&gt;
      return &amp;quot;unsigned char&amp;quot;;&lt;br /&gt;
    case OLE.VT_UI4:&lt;br /&gt;
      return &amp;quot;unsigned int&amp;quot;;&lt;br /&gt;
    case OLE.VT_USERDEFINED:&lt;br /&gt;
      return &amp;quot;UserDefined&amp;quot;;&lt;br /&gt;
    case OLE.VT_HRESULT:&lt;br /&gt;
      return &amp;quot;int&amp;quot;;&lt;br /&gt;
    case OLE.VT_VOID:&lt;br /&gt;
      return &amp;quot;void&amp;quot;;&lt;br /&gt;
    case OLE.VT_BYREF | OLE.VT_BOOL:&lt;br /&gt;
      return &amp;quot;boolean *&amp;quot;;&lt;br /&gt;
    case OLE.VT_BYREF | OLE.VT_R4:&lt;br /&gt;
      return &amp;quot;float *&amp;quot;;&lt;br /&gt;
    case OLE.VT_BYREF | OLE.VT_R8:&lt;br /&gt;
      return &amp;quot;double *&amp;quot;;&lt;br /&gt;
    case OLE.VT_BYREF | OLE.VT_I4:&lt;br /&gt;
      return &amp;quot;int *&amp;quot;;&lt;br /&gt;
    case OLE.VT_BYREF | OLE.VT_DISPATCH:&lt;br /&gt;
      return &amp;quot;IDispatch *&amp;quot;;&lt;br /&gt;
    case OLE.VT_BYREF | OLE.VT_UNKNOWN:&lt;br /&gt;
      return &amp;quot;IUnknown *&amp;quot;;&lt;br /&gt;
    case OLE.VT_BYREF | OLE.VT_I2:&lt;br /&gt;
      return &amp;quot;short *&amp;quot;;&lt;br /&gt;
    case OLE.VT_BYREF | OLE.VT_BSTR:&lt;br /&gt;
      return &amp;quot;String *&amp;quot;;&lt;br /&gt;
    case OLE.VT_BYREF | OLE.VT_VARIANT:&lt;br /&gt;
      return &amp;quot;Variant *&amp;quot;;&lt;br /&gt;
    case OLE.VT_BYREF | OLE.VT_CY:&lt;br /&gt;
      return &amp;quot;Currency *&amp;quot;;&lt;br /&gt;
    case OLE.VT_BYREF | OLE.VT_DATE:&lt;br /&gt;
      return &amp;quot;Date *&amp;quot;;&lt;br /&gt;
    case OLE.VT_BYREF | OLE.VT_UI1:&lt;br /&gt;
      return &amp;quot;unsigned char *&amp;quot;;&lt;br /&gt;
    case OLE.VT_BYREF | OLE.VT_UI4:&lt;br /&gt;
      return &amp;quot;unsigned int *&amp;quot;;&lt;br /&gt;
    case OLE.VT_BYREF | OLE.VT_USERDEFINED:&lt;br /&gt;
      return &amp;quot;UserDefined *&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return &amp;quot;unknown &amp;quot; + type;&lt;br /&gt;
  }&lt;br /&gt;
  private static String getDirection(int direction) {&lt;br /&gt;
    String dirString = &amp;quot;&amp;quot;;&lt;br /&gt;
    boolean comma = false;&lt;br /&gt;
    if ((direction &amp;amp; OLE.IDLFLAG_FIN) != 0) {&lt;br /&gt;
      dirString += &amp;quot;in&amp;quot;;&lt;br /&gt;
      comma = true;&lt;br /&gt;
    }&lt;br /&gt;
    if ((direction &amp;amp; OLE.IDLFLAG_FOUT) != 0) {&lt;br /&gt;
      if (comma)&lt;br /&gt;
        dirString += &amp;quot;, &amp;quot;;&lt;br /&gt;
      dirString += &amp;quot;out&amp;quot;;&lt;br /&gt;
      comma = true;&lt;br /&gt;
    }&lt;br /&gt;
    if ((direction &amp;amp; OLE.IDLFLAG_FLCID) != 0) {&lt;br /&gt;
      if (comma)&lt;br /&gt;
        dirString += &amp;quot;, &amp;quot;;&lt;br /&gt;
      dirString += &amp;quot;lcid&amp;quot;;&lt;br /&gt;
      comma = true;&lt;br /&gt;
    }&lt;br /&gt;
    if ((direction &amp;amp; OLE.IDLFLAG_FRETVAL) != 0) {&lt;br /&gt;
      if (comma)&lt;br /&gt;
        dirString += &amp;quot;, &amp;quot;;&lt;br /&gt;
      dirString += &amp;quot;retval&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return dirString;&lt;br /&gt;
  }&lt;br /&gt;
  private static String getInvokeKind(int invKind) {&lt;br /&gt;
    switch (invKind) {&lt;br /&gt;
    case OLE.INVOKE_FUNC:&lt;br /&gt;
      return &amp;quot;METHOD&amp;quot;;&lt;br /&gt;
    case OLE.INVOKE_PROPERTYGET:&lt;br /&gt;
      return &amp;quot;PROPERTY GET&amp;quot;;&lt;br /&gt;
    case OLE.INVOKE_PROPERTYPUT:&lt;br /&gt;
      return &amp;quot;PROPERTY PUT&amp;quot;;&lt;br /&gt;
    case OLE.INVOKE_PROPERTYPUTREF:&lt;br /&gt;
      return &amp;quot;PROPERTY PUT BY REF&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    return &amp;quot;unknown &amp;quot; + invKind;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 17. OLE and ActiveX: get events from IE control (win32 only) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/*******************************************************************************&lt;br /&gt;
 * Copyright (c) 2000, 2004 IBM Corporation and others.&lt;br /&gt;
 * All rights reserved. This program and the accompanying materials&lt;br /&gt;
 * are made available under the terms of the Eclipse Public License v1.0&lt;br /&gt;
 * which accompanies this distribution, and is available at&lt;br /&gt;
 * http://www.eclipse.org/legal/epl-v10.html&lt;br /&gt;
 *&lt;br /&gt;
 * Contributors:&lt;br /&gt;
 *     IBM Corporation - initial API and implementation&lt;br /&gt;
 *******************************************************************************/&lt;br /&gt;
//package org.eclipse.swt.snippets;&lt;br /&gt;
/*&lt;br /&gt;
 * OLE and ActiveX example snippet: get events from IE control (win32 only)&lt;br /&gt;
 * NOTE: This snippet uses internal SWT packages that are&lt;br /&gt;
 * subject to change without notice.&lt;br /&gt;
 *&lt;br /&gt;
 * For a list of all SWT example snippets see&lt;br /&gt;
 * http://www.eclipse.org/swt/snippets/&lt;br /&gt;
 */&lt;br /&gt;
import org.eclipse.swt.SWT;&lt;br /&gt;
import org.eclipse.swt.SWTError;&lt;br /&gt;
import org.eclipse.swt.internal.ole.win32.ru;&lt;br /&gt;
import org.eclipse.swt.internal.ole.win32.ruObject;&lt;br /&gt;
import org.eclipse.swt.internal.ole.win32.GUID;&lt;br /&gt;
import org.eclipse.swt.internal.ole.win32.IDispatch;&lt;br /&gt;
import org.eclipse.swt.layout.FillLayout;&lt;br /&gt;
import org.eclipse.swt.ole.win32.OLE;&lt;br /&gt;
import org.eclipse.swt.ole.win32.OleAutomation;&lt;br /&gt;
import org.eclipse.swt.ole.win32.OleControlSite;&lt;br /&gt;
import org.eclipse.swt.ole.win32.OleEvent;&lt;br /&gt;
import org.eclipse.swt.ole.win32.OleFrame;&lt;br /&gt;
import org.eclipse.swt.ole.win32.OleListener;&lt;br /&gt;
import org.eclipse.swt.ole.win32.Variant;&lt;br /&gt;
import org.eclipse.swt.widgets.Display;&lt;br /&gt;
import org.eclipse.swt.widgets.Shell;&lt;br /&gt;
public class GetEventsFromIE {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    final Display display = new Display();&lt;br /&gt;
    Shell shell = new Shell(display);&lt;br /&gt;
    shell.setLayout(new FillLayout());&lt;br /&gt;
    OleControlSite controlSite;&lt;br /&gt;
    try {&lt;br /&gt;
      OleFrame frame = new OleFrame(shell, SWT.NONE);&lt;br /&gt;
      controlSite = new OleControlSite(frame, SWT.NONE, &amp;quot;Shell.Explorer&amp;quot;);&lt;br /&gt;
      controlSite.doVerb(OLE.OLEIVERB_INPLACEACTIVATE);&lt;br /&gt;
    } catch (SWTError e) {&lt;br /&gt;
      System.out.println(&amp;quot;Unable to open activeX control&amp;quot;);&lt;br /&gt;
      return;&lt;br /&gt;
    }&lt;br /&gt;
    shell.open();&lt;br /&gt;
    // IWebBrowser&lt;br /&gt;
    final OleAutomation webBrowser = new OleAutomation(controlSite);&lt;br /&gt;
    // When a new document is loaded, access the document object for the new&lt;br /&gt;
    // page.&lt;br /&gt;
    int DownloadComplete = 104;&lt;br /&gt;
    controlSite.addEventListener(DownloadComplete, new OleListener() {&lt;br /&gt;
      public void handleEvent(OleEvent event) {&lt;br /&gt;
        int[] htmlDocumentID = webBrowser.getIDsOfNames(new String[] { &amp;quot;Document&amp;quot; });&lt;br /&gt;
        if (htmlDocumentID == null)&lt;br /&gt;
          return;&lt;br /&gt;
        Variant pVarResult = webBrowser.getProperty(htmlDocumentID[0]);&lt;br /&gt;
        if (pVarResult == null || pVarResult.getType() == 0)&lt;br /&gt;
          return;&lt;br /&gt;
        // IHTMLDocument2&lt;br /&gt;
        OleAutomation htmlDocument = pVarResult.getAutomation();&lt;br /&gt;
        // Request to be notified of click, double click and key down events&lt;br /&gt;
        EventDispatch myDispatch = new EventDispatch(EventDispatch.onclick);&lt;br /&gt;
        IDispatch idispatch = new IDispatch(myDispatch.getAddress());&lt;br /&gt;
        Variant dispatch = new Variant(idispatch);&lt;br /&gt;
        htmlDocument.setProperty(EventDispatch.onclick, dispatch);&lt;br /&gt;
        myDispatch = new EventDispatch(EventDispatch.ondblclick);&lt;br /&gt;
        idispatch = new IDispatch(myDispatch.getAddress());&lt;br /&gt;
        dispatch = new Variant(idispatch);&lt;br /&gt;
        htmlDocument.setProperty(EventDispatch.ondblclick, dispatch);&lt;br /&gt;
        myDispatch = new EventDispatch(EventDispatch.onkeydown);&lt;br /&gt;
        idispatch = new IDispatch(myDispatch.getAddress());&lt;br /&gt;
        dispatch = new Variant(idispatch);&lt;br /&gt;
        htmlDocument.setProperty(EventDispatch.onkeydown, dispatch);&lt;br /&gt;
        // Remember to release OleAutomation Object&lt;br /&gt;
        htmlDocument.dispose();&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    // Navigate to a web site&lt;br /&gt;
    int[] ids = webBrowser.getIDsOfNames(new String[] { &amp;quot;Navigate&amp;quot;, &amp;quot;URL&amp;quot; });&lt;br /&gt;
    Variant[] rgvarg = new Variant[] { new Variant(&amp;quot;http://www.google.ru&amp;quot;) };&lt;br /&gt;
    int[] rgdispidNamedArgs = new int[] { ids[1] };&lt;br /&gt;
    webBrowser.invoke(ids[0], rgvarg, rgdispidNamedArgs);&lt;br /&gt;
    while (!shell.isDisposed()) {&lt;br /&gt;
      if (!display.readAndDispatch())&lt;br /&gt;
        display.sleep();&lt;br /&gt;
    }&lt;br /&gt;
    // Remember to release OleAutomation Object&lt;br /&gt;
    webBrowser.dispose();&lt;br /&gt;
    display.dispose();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
// EventDispatch implements a simple IDispatch interface which will be called&lt;br /&gt;
// when the event is fired.&lt;br /&gt;
class EventDispatch {&lt;br /&gt;
  private COMObject iDispatch;&lt;br /&gt;
  private int refCount = 0;&lt;br /&gt;
  private int eventID;&lt;br /&gt;
  final static int onhelp = 0x8001177d;&lt;br /&gt;
  final static int onclick = 0x80011778;&lt;br /&gt;
  final static int ondblclick = 0x80011779;&lt;br /&gt;
  final static int onkeyup = 0x80011776;&lt;br /&gt;
  final static int onkeydown = 0x80011775;&lt;br /&gt;
  final static int onkeypress = 0x80011777;&lt;br /&gt;
  final static int onmouseup = 0x80011773;&lt;br /&gt;
  final static int onmousedown = 0x80011772;&lt;br /&gt;
  final static int onmousemove = 0x80011774;&lt;br /&gt;
  final static int onmouseout = 0x80011771;&lt;br /&gt;
  final static int onmouseover = 0x80011770;&lt;br /&gt;
  final static int onreadystatechange = 0x80011789;&lt;br /&gt;
  final static int onafterupdate = 0x80011786;&lt;br /&gt;
  final static int onrowexit = 0x80011782;&lt;br /&gt;
  final static int onrowenter = 0x80011783;&lt;br /&gt;
  final static int ondragstart = 0x80011793;&lt;br /&gt;
  final static int onselectstart = 0x80011795;&lt;br /&gt;
  EventDispatch(int eventID) {&lt;br /&gt;
    this.eventID = eventID;&lt;br /&gt;
    createCOMInterfaces();&lt;br /&gt;
  }&lt;br /&gt;
  int getAddress() {&lt;br /&gt;
    return iDispatch.getAddress();&lt;br /&gt;
  }&lt;br /&gt;
  private void createCOMInterfaces() {&lt;br /&gt;
    iDispatch = new COMObject(new int[] { 2, 0, 0, 1, 3, 4, 8 }) {&lt;br /&gt;
      public int method0(int[] args) {&lt;br /&gt;
        return QueryInterface(args[0], args[1]);&lt;br /&gt;
      }&lt;br /&gt;
      public int method1(int[] args) {&lt;br /&gt;
        return AddRef();&lt;br /&gt;
      }&lt;br /&gt;
      public int method2(int[] args) {&lt;br /&gt;
        return Release();&lt;br /&gt;
      }&lt;br /&gt;
      // method3 GetTypeInfoCount - not implemented&lt;br /&gt;
      // method4 GetTypeInfo - not implemented&lt;br /&gt;
      // method5 GetIDsOfNames - not implemented&lt;br /&gt;
      public int method6(int[] args) {&lt;br /&gt;
        return Invoke(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]);&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
  }&lt;br /&gt;
  private void disposeCOMInterfaces() {&lt;br /&gt;
    if (iDispatch != null)&lt;br /&gt;
      iDispatch.dispose();&lt;br /&gt;
    iDispatch = null;&lt;br /&gt;
  }&lt;br /&gt;
  private int AddRef() {&lt;br /&gt;
    refCount++;&lt;br /&gt;
    return refCount;&lt;br /&gt;
  }&lt;br /&gt;
  private int Invoke(int dispIdMember, int riid, int lcid, int dwFlags, int pDispParams,&lt;br /&gt;
      int pVarResult, int pExcepInfo, int pArgErr) {&lt;br /&gt;
    switch (eventID) {&lt;br /&gt;
    case onhelp:&lt;br /&gt;
      System.out.println(&amp;quot;onhelp&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case onclick:&lt;br /&gt;
      System.out.println(&amp;quot;onclick&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case ondblclick:&lt;br /&gt;
      System.out.println(&amp;quot;ondblclick&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case onkeyup:&lt;br /&gt;
      System.out.println(&amp;quot;onkeyup&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case onkeydown:&lt;br /&gt;
      System.out.println(&amp;quot;onkeydown&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case onkeypress:&lt;br /&gt;
      System.out.println(&amp;quot;onkeypress&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case onmouseup:&lt;br /&gt;
      System.out.println(&amp;quot;onmouseup&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case onmousedown:&lt;br /&gt;
      System.out.println(&amp;quot;onmousedown&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case onmousemove:&lt;br /&gt;
      System.out.println(&amp;quot;onmousemove&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case onmouseout:&lt;br /&gt;
      System.out.println(&amp;quot;onmouseout&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case onmouseover:&lt;br /&gt;
      System.out.println(&amp;quot;onmouseover&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case onreadystatechange:&lt;br /&gt;
      System.out.println(&amp;quot;onreadystatechange&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case onafterupdate:&lt;br /&gt;
      System.out.println(&amp;quot;onafterupdate&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case onrowexit:&lt;br /&gt;
      System.out.println(&amp;quot;onrowexit&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case onrowenter:&lt;br /&gt;
      System.out.println(&amp;quot;onrowenter&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case ondragstart:&lt;br /&gt;
      System.out.println(&amp;quot;ondragstart&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    case onselectstart:&lt;br /&gt;
      System.out.println(&amp;quot;onselectstart&amp;quot;);&lt;br /&gt;
      break;&lt;br /&gt;
    }&lt;br /&gt;
    return COM.S_OK;&lt;br /&gt;
  }&lt;br /&gt;
  private int QueryInterface(int riid, int ppvObject) {&lt;br /&gt;
    if (riid == 0 || ppvObject == 0)&lt;br /&gt;
      return COM.E_INVALIDARG;&lt;br /&gt;
    GUID guid = new GUID();&lt;br /&gt;
    COM.MoveMemory(guid, riid, GUID.sizeof);&lt;br /&gt;
    if (COM.IsEqualGUID(guid, COM.IIDIUnknown) || COM.IsEqualGUID(guid, COM.IIDIDispatch)) {&lt;br /&gt;
      COM.MoveMemory(ppvObject, new int[] { iDispatch.getAddress() }, 4);&lt;br /&gt;
      AddRef();&lt;br /&gt;
      return COM.S_OK;&lt;br /&gt;
    }&lt;br /&gt;
    COM.MoveMemory(ppvObject, new int[] { 0 }, 4);&lt;br /&gt;
    return COM.E_NOINTERFACE;&lt;br /&gt;
  }&lt;br /&gt;
  int Release() {&lt;br /&gt;
    refCount--;&lt;br /&gt;
    if (refCount == 0) {&lt;br /&gt;
      disposeCOMInterfaces();&lt;br /&gt;
    }&lt;br /&gt;
    return refCount;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 17. Using System Icon Image ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import org.eclipse.swt.SWT;&lt;br /&gt;
import org.eclipse.swt.layout.RowLayout;&lt;br /&gt;
import org.eclipse.swt.widgets.Display;&lt;br /&gt;
import org.eclipse.swt.widgets.Label;&lt;br /&gt;
import org.eclipse.swt.widgets.Shell;&lt;br /&gt;
public class SystemIconImage {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    Display display = new Display();&lt;br /&gt;
    Shell shell = new Shell(display);&lt;br /&gt;
    shell.setLayout(new RowLayout());&lt;br /&gt;
&lt;br /&gt;
    Label label = new Label (shell, SWT.NONE);&lt;br /&gt;
    label.setImage(display.getSystemImage(SWT.ICON_ERROR));&lt;br /&gt;
    label = new Label (shell, SWT.NONE);&lt;br /&gt;
    label.setText(&amp;quot;SWT.ICON_ERROR&amp;quot;);&lt;br /&gt;
    label = new Label (shell, SWT.NONE);&lt;br /&gt;
    label.setImage(display.getSystemImage(SWT.ICON_INFORMATION));&lt;br /&gt;
    label = new Label (shell, SWT.NONE);&lt;br /&gt;
    label.setText(&amp;quot;SWT.ICON_INFORMATION&amp;quot;);&lt;br /&gt;
    label = new Label (shell, SWT.NONE);&lt;br /&gt;
    label.setImage(display.getSystemImage(SWT.ICON_WARNING));&lt;br /&gt;
    label = new Label (shell, SWT.NONE);&lt;br /&gt;
    label.setText(&amp;quot;SWT.ICON_WARNING&amp;quot;);&lt;br /&gt;
    label = new Label (shell, SWT.NONE);&lt;br /&gt;
    label.setImage(display.getSystemImage(SWT.ICON_QUESTION));&lt;br /&gt;
    label = new Label (shell, SWT.NONE);&lt;br /&gt;
    label.setText(&amp;quot;SWT.ICON_QUESTION&amp;quot;);&lt;br /&gt;
    shell.setSize(400, 350);&lt;br /&gt;
    shell.open();&lt;br /&gt;
    while (!shell.isDisposed()) {&lt;br /&gt;
      if (!display.readAndDispatch()) {&lt;br /&gt;
        display.sleep();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    display.dispose();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>