SWT - ActiveX - OLE Internet Explorer

Schumi_86

Grünschnabel
Hallo,

ich möchte gerne in meinem Programm Bilder über den Internet Explorer anzeigen. Dazu habe ich erstmal eine grobe Action geschrieben.

public class BrowserOleAction extends Action {

public BrowserOleAction(){
super();
setId("ole");
setActionDefinitionId("ole");
setText("Ole");
}

public void run(){
Shell shell = new Shell();
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;
}
final OleAutomation webBrowser = new OleAutomation(controlSite);

int[] browserIDs = webBrowser.getIDsOfNames(new String[] { "Navigate", "URL" });

Variant[] address = new Variant[] { new Variant( "http://www.google.de") };

webBrowser.invoke(browserIDs[0], address, new int[] { browserIDs[1] });

shell.open();
}
}

Bin ich damit auf dem richtigen Weg? Wie bekomme ich es hin, dass auch die Menü - und Werkzeugleiste vom IE zu sehen sind? :confused:

Schumi
 
Warum nimmst du nicht direkt das Browser-Widget von SWT. Das nutzt auf Windows den InternetExplorer und auf anderen Betriebssystemen gibt es dafür auch Default-Browser. Und du musst dich nicht mit OLE abmühen.
 
Hi,

erstmal danke für deine Hilfe. Hatte mir auch schon überlegt den SWT Browser zunehmen. Das funktionierte ja soweit auch schon, dass ich zu den Seiten kam. Nur ich hab weiterhin das Problem, dass ich gerne die Menüleisten vom IE direkt mitbekommen würde. Bis jetzt öffnen sich einfach nur ein Fenster mit der entsprechenden Seite, aber komplett ohne Menüleiste.

public class BrowserAction extends Action {

public BrowserAction(String text, IWorkbenchWindow window) {
super(text);
setId("browser");
setActionDefinitionId("browser");
}

public void run(){
Shell shell = new Shell();
shell.setLayout(new FillLayout());
Browser browser = null;
try {
browser = new Browser(shell, SWT.NONE);

} catch (SWTError e) {
e.printStackTrace();
}
if (browser != null) {
browser.setUrl("http://www.eclipse.org");
}
shell.open();
}
}
 
Denk auf jeden Fall daran dass du OleFrame, OleClientSite und OleControlSite nach der Benutzung disposen musst.

Hier steht noch was zu SWT und OLE: http://www.eclipse.org/articles/article.php?file=Article-ActivexSupportInSwt/index.html

Die Dokumentation zum IE findest du hier: http://msdn.microsoft.com/library/d...eference/ifaces/iwebbrowser2/iwebbrowser2.asp

Um verfügbare Namen herauszufinden mache immer immer folgendes:
Java:
private static void exploreOleAutomation(final OleAutomation oleAuto) {
	for (int i = 0; i < 10000; i++) {
		String name = oleAuto.getName(i);
		if (name != null) {
			System.out.println(i + " " + name);
		}
	}
}
 
Hey,

danke nochmal für deine mühe. hab es mit dem swt browser und OLE immer noch nicht hinbekommen, mir die normale Menüleiste des IE anzeigen zu lassen. Vielleicht bin ich dafür einfach zu blöde... :rolleyes:

Hab dafür aber auch noch eine andere Alternative gefunden, die ich vielleicht verwenden werde...

Program program = Program.findProgram(".html");
program.execute("c:/meinbild.jpg");
 
Hey,

hätte die Menüleiste gerne, weil der IE mir somit schon viele gewohnte Funktionalitäten mitbringt wie suchen, drucken, druckeinrichtung, tastaturkürzel, speichern usw... Hatte auch schon überlegt und auch probiert die Menüs selbst zu implementieren. Hat an manchen Stellen funktioniert. An anderen hatte ich aber auch noch ordentlich Probleme, zb beim drucken. Außerdem finde ich es für den Benutzer einfacher, wenn er sich in einer gewohnten Umgebung befindet.
Die Lösung, die ich jetzt gefunden hatte ist somit schonmal zufriedenstellend fürs erste. Später hätte ich gerne, dass wenn ich die Aktion erneut aufrufe, sich der aktuelle ie aktuallisiert und nicht das ein neues fenster aufgemacht wird. Ob das mit dieser Lösung zu realisieren ist weiß ich leider noch nicht...
 
Hallo,

weiß jemand vielleicht eine Methode wie man jpg und pdf Dateien aus dem Internet mit den standart Programmen öffnet. Also nicht mit dem IE sondern die jpg Dateien mit dem WindowsFaxViewer und die pdf Dateien mit dem Adobe Reader.

wenn ich die findProgram(".pdf") aufrufe bekomme ich nur null zurück. Und bei findProgram(".jpg") wird versucht das Programm die Dateien mit dem MS Office Picture Manager zu öffnen.

Das wäre nämlich auch noch eine Alternative für mich...
 
Dann scheinen die Programme bei dir nicht als Standardprogramme installiert zu sein. Schau das doch mal nach was zu den Dateiendungen da steht. Wenn Office installiert ist, wird auf jeden Fall auch der Picture Manager als Standard für jpg registriert, also das ist schonmal korrekt.
 
Wo kann ich das denn nachschauen? Steht das irgendwo in der Registry? Dachte eigentlich, dass wenn ich zum Beispiel bei einer JPG Datei "Öffnen mit.." sage, dann den Hacken bei "Dateityp immer mit diesem Programm öffnen" setze dann als StandartProgramm das Programm genommen wird was ich ausgewählt habe. Aber das klappt so nicht. Gibt es einen anderen Weg ein Programm zum Standardprogramm zu machen?

Das gleiche bei einer PDF Datei. Wenn ich einen Doppelklick auf die Datei mache öffnet sich der Adobe Reader. Also sollte der Adobe Reader doch eigentlich das Standardprogramm sein. Trotzdem bekomme ich bei findProgramm(".pdf") nur null zurück...
 
Zurück