2009-09-21 13 views
1

L'explorateur de shell sur Windows définit des objets globaux tels que :: {2559a1f4-21d7-11d4-bdaf-00c04f60b9f0 qui est un lien vers l'utilisateur "navigateur Internet". J'ai obtenu ces valeur à partir d'un raccourci qui fait glisser & sur mon application, mais je ne trouve pas comment l'utiliser pour l'ouvrir ...Comment exécuter ShellExecute sur l'objet shell clsid?

Je voudrais obtenir des informations sur ce que cet objet est aussi.

  • Est-ce que quelqu'un sait comment demander à Windows ce qu'est cet objet?
  • Est-ce que quelqu'un sait comment l'ouvrir?

J'ai trouvé que ces objets se trouvent en lisant dans le registre à:

initString = HLCR\CLSID\\{CLSID\}\PersistentBag\InitString 
openCommand = HKLM\Software\Clients\{initString}\shell\open\command 

Habituellement ne est pas une bonne idée de lire directement à partir du registre. Je serais ravi d'avoir une façon plus simple de lire ces valeurs.

Merci.

+0

{2559a1f3-21d7-11d4-bdaf-00c04f60b9f0} est Exécuté (Win + R) autant que je peux dire – Anders

+0

@anders: vous avez raison, j'ai fouillé autour du registre et de copier la mauvaise valeur. –

Répondre

1

Apparemment, vous devez remplir une structure SHELLEXECUTEINFO, avec le champ fMask défini sur SEE_MASK_CLASSKEY, le champ lpVerb défini sur "open" et le lpClass défini sur votre GUID.

Cependant, je n'ai jamais eu la fichue chose à travailler. Au lieu de cela, j'ai utilisé un fichier du type correct à utiliser dans un appel CreateProcess.

HINSTANCE h = FindExecutable("blank.htm", NULL, buffer); 

    STARTUPINFO si; 
    PROCESS_INFORMATION pi; 
    ZeroMemory(&si, sizeof(si)); 
    si.cb = sizeof(si); 
    ZeroMemory(&pi, sizeof(pi)); 

    char url[MAX_PATH]; 
    sprintf(url, "\"%s\" %s", buffer, (LPCTSTR)m_url); 
    CreateProcess(NULL, url, NULL, NULL, FALSE, 0 , NULL, NULL, &si, &pi); 

Qui ouvre l'application définie comme visionneuse par défaut pour les fichiers de type .htm.

+0

J'ai vraiment besoin d'exécuter l'un de ces liens, pas seulement le "navigateur Internet". Je vais essayer votre premier conseil cependant. Merci. –

0

De « Création d'extensions Shell avec des objets Shell instance » à http://msdn.microsoft.com/en-us/library/ms997573.aspx il est dit que

Alors qu'une extension shell traditionnelle nécessite une DLL pour implémenter l'objet, un objet d'instance de shell récupère tout ce qu'il a besoin de savoir de la enregistrement.

Il semble que vous puissiez lire les informations du registre en toute sécurité car c'est la solution documentée pour les créer.