Re: Invoking Application based on UID.
"Christophe Bouhier (MC/ECM)" <[email protected]>
| Newsgroups | gmane.comp.windows.devel.jawin |
|---|---|
| Message-ID | <6BA346EB59B2D51194E200508B046FE107DFE935@emyklnt151.ao.ericsson.se> |
Hi,
Objective: Detect the default browser and open it with some URL.
Approach: Read all I can grab and try stuff out..
Efficiency: Not very good, trial and error...Struggling to understand COM, back to the basics...
I tried something else with more success. (This code works).
try {
Ole32.CoInitialize();
GUID guid = new GUID("{91493441-5A91-11CF-8700-00AA0060263B}");
DispatchPtr powerpoint = new DispatchPtr(guid);
powerpoint.put("Visible", true);
Ole32.CoUninitialize();
} catch (COMException e) {
e.printStackTrace();
System.out.println(e.getMessage());
}
So OK, I can use the Clsid instead of the ProgID to access COM, but
the thing is I don't know the CLsid, so I look it up in the registry.
HKEY_LOCAL_MACHINE\SOFTWARE\\Classes\\.htt\\PersistentHandler
PersistentHandler key return an ID which returns the message:
- 80040154: Class not registered
So I guess I am trying to invoke on a non-valid Clsid.
I am really confused on how the PersistenHandler key relates to the valid application CLsid...
It would be great if someone can enlight me here....
Cheers / Christophe
-----Original Message-----
From: Discussion of Java/Win32/COM integration with Jawin
[mailto:[email protected]]
Sent: Wednesday, March 09, 2005 12:01 PM
To: [email protected]
Subject: Re: [JAWIN] Invoking Application based on UID.
I may be a Java newbie, but I know COM.
Doesn't COMException contain the HRESULT of the failing operation?
What is it?
++PLS
-----Original Message-----
From: Discussion of Java/Win32/COM integration with Jawin
[mailto:[email protected]] On Behalf Of Christophe Bouhier (MC/ECM)
Sent: Tuesday, March 08, 2005 8:11 PM
To: [email protected]
Subject: [JAWIN] Invoking Application based on UID.
Hi,
I have been using jawin succesfully in my application, accessing COM through
the Dispatch interface. This easy to do, minding a well documented API (Like
iTunes).
Now I try to access COM through the GUID of an application, as retrieved
from the registry.
I have the feeling that I am close to the solution, but I think I am
overlooking something.
Specifically I query the Registry to retrieve a file extension's
'PersistentHandler'.
Here is the code below. I can create the extend Dispatch class named
"ipBrowser" but invoking a method on it throws a COMexception.
Can someone tell me what I am doing wrong?
///// GET A KEY METHOD
public static String getStringValue(int area, String keyString,
String valueString) {
int key;
try {
key = Registry.OpenKey(area,
keyString);
String value = Registry.QueryStringValue(key, valueString);
Registry.CloseKey(key);
return value;
return value;
} catch (IOException e) {
e.printStackTrace();
} catch (COMException e) {
e.printStackTrace();
}
////////////////////////////////////////
// CREATE A
///////////////////////////////////////
String id = ipRegistry.getStringValue(
RegistryConstants.HKEY_LOCAL_MACHINE,
"SOFTWARE\\Classes\\.htt\\PersistentHandler", "");
try {
Ole32.CoInitialize();
ipBrowser browser = new ipBrowser(id);
browser.invoke("Open","www.yahoo.com"); <<<-----------COM
EXCEPTION.
Ole32.CoUninitialize();
} catch (COMException e) {
e.printStackTrace();
}
///////////////////////////////////////////
// EXTEND DISPATH TO register the GUID
//////////////////////////////////////////
public class ipBrowser extends DispatchPtr {
public GUID DIID;
public int iidToken;
public ipBrowser(String guid) {
DIID = new GUID(guid);
iidToken = IdentityManager.registerProxy(DIID,
ipLaunchBrowser.class);
}
/**
* @see org.jawin.IUnknown#getIIDToken()
*/
public int getIIDToken() {
return iidToken;
}
}
Thank / Christophe