I'm developing an Action plug-in using Actions API of the SDK, with
Visual Studio .NET and c# (and vb.net)
The register process works ok, aparently. At least, the registration
gives no error, and I can use Query API and Index API without problem,
sending events and quering ok.
However, I have created a COM Class to implement
IGoogleDesktopCustomAction, in c#, and nothing: the methods
QueryInterest or HandleAction are never called.
The problem is that there isn't enought documentation about this API,
I think. I've "googled" in internet and there is almost nohing.
Can you say what I'm doing wrong?
Thanks in advanced
Daniel
COM Class is defined as you can see below (in a project named
"GDSAction2", with "Register for COM interoperability" checked)
using System;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using GoogleDesktopAPILib;
public enum ActionHandling: int
{
ACTION_HANDLING_DEFAULT = 0,
ACTION_HANDLING_QUENCH = 1,
ACTION_HANDLING_OVERRIDE = 2
}
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[GuidAttribute("E5A04D23-6921-4ef6-B19B-6C6AA89A46AA")]
public interface IGoogleDesktopCustomAction
{
[DispId(1)]
int QueryInterest(
[In] Guid location,
[In] Guid action,
[In, MarshalAs(UnmanagedType.BStr)] string query_string,
[In, MarshalAs(UnmanagedType.IUnknown)] object item,
[In, Out, MarshalAs(UnmanagedType.BStr)] ref string
actionTitle,
[Out, MarshalAs(UnmanagedType.BStr)] out string actionCookie,
[Out] out ActionHandling handling);
[DispId(2)]
int HandleAction(
[In] Guid location,
[In] Guid action,
[In, MarshalAs(UnmanagedType.BStr)] string query_string,
[In, MarshalAs(UnmanagedType.IUnknown)] object item,
[In, MarshalAs(UnmanagedType.BStr)] string action_cookie);
}
[ComVisible(true)]
[GuidAttribute("741a99f3-0e5b-46ad-b167-f56478bac042")]
public class SearchActions : IGoogleDesktopCustomAction
{
public int HandleAction(Guid location, Guid action, string
query, object item, string actionCookie)
{
try
{
MessageBox.Show("HandleAction HOLA: "+ query);
//MessageBox(NULL, str, L"Action!", MB_OK |
MB_SERVICE_NOTIFICATION);
//string uri =
((IGoogleDesktopNotifyEvent)item).GetProperty("uri").ToString();
//System.Diagnostics.Process.Start(uri);
}
catch (COMException)
{ }
return 0;
}
public int QueryInterest(Guid location, Guid action, string
query, object item, ref string actionTitle, out string actionCookie,
out ActionHandling handling)
{
actionCookie = "DANI";
actionTitle = "DANI" + actionTitle;
handling = ActionHandling.ACTION_HANDLING_OVERRIDE;
return 0;
//string uri =
((IGoogleDesktopNotifyEvent)item).GetProperty("uri").ToString();
//actionCookie = "DANI";
//string extension = uri.Substring(uri.LastIndexOf('.') +
1);
//if (extension == "txt")
// handling = ActionHandling.ACTION_HANDLING_OVERRIDE;
//else
// handling = ActionHandling.ACTION_HANDLING_DEFAULT;
//
//return 0;
}
}
When project is generated I can see the new class COM in the register:
[HKEY_CLASSES_ROOT\CLSID\{741A99F3-0E5B-46AD-B167-F56478BAC042}]
@="SearchActions"
[HKEY_CLASSES_ROOT\CLSID\{741A99F3-0E5B-46AD-B167-
F56478BAC042}\Implemented Categories]
[HKEY_CLASSES_ROOT\CLSID\{741A99F3-0E5B-46AD-B167-
F56478BAC042}\Implemented Categories\{62C8FE65-4EBB-45e7-
B440-6E39B2CDBF29}]
[HKEY_CLASSES_ROOT\CLSID\{741A99F3-0E5B-46AD-B167-
F56478BAC042}\InprocServer32]
@="mscoree.dll"
"ThreadingModel"="Both"
"Class"="SearchActions"
"Assembly"="GDSAction2, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=null"
"RuntimeVersion"="v2.0.50727"
"CodeBase"="file:///D:/PROYECTOS/Ejemplos GoogleDesktop/GDSAction2/bin/
Release/GDSAction2.dll"
[HKEY_CLASSES_ROOT\CLSID\{741A99F3-0E5B-46AD-B167-
F56478BAC042}\InprocServer32\1.0.0.0]
"Class"="SearchActions"
"Assembly"="GDSAction2, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=null"
"RuntimeVersion"="v2.0.50727"
"CodeBase"="file:///D:/PROYECTOS/Ejemplos GoogleDesktop/GDSAction2/bin/
Release/GDSAction2.dll"
[HKEY_CLASSES_ROOT\CLSID\{741A99F3-0E5B-46AD-B167-
F56478BAC042}\ProgId]
@="SearchActions"
The registration process is:
IGoogleDesktopRegistrar gdsReg = new
GoogleDesktopAPILib.GoogleDesktopRegistrarClass();
object[] componentDesc = new object[6] {
"Title", _name,
"Description",
_description,
"Icon", _icon
};
gdsReg.StartComponentRegistration(_componentGuid,
componentDesc);
IGoogleDesktopRegisterCustomAction spRegistrationAction;
spRegistrationAction=
(IGoogleDesktopRegisterCustomAction)gdsReg.GetRegistrationInterface("GoogleDesktop.ActionRegistration");
spRegistrationAction.RegisterAction(_CLSID_SearchActions.ToUpper() ,
ACTION_OPEN_SEARCH_RESULT, null);
gdsReg.FinishComponentRegistration();
Where:
string _CLSID_SearchActions = "{741a99f3-0e5b-46ad-b167-
f56478bac042}"; // GUID of COM Class
const string ACTION_OPEN_SEARCH_RESULT = "{21B7E880-EEB5-4c3d-8E56-
BFF2A6654E6E}";
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Google Desktop Developer Group" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/Google-Desktop-Developer?hl=en
-~----------~----~----~----~------~----~------~--~---