IE Button hinzu



  • hi zusammen,
    diese Frage ist oft gestellt worden, deswegen mein Beitrag für die FAQ's dazu:

    /**********************************************************/
    /* Das Programm erzeugt einen Button im Internet Explorer */
    /*                                                        */
    /* Eingabe Parameter: Systemspezifische Daten             */ 
    /* Return-Wert: 0                                         */
    /**********************************************************/
    
    #include <windows.h> // muss sein ;)
    #include <Rpcdce.h> // für GUID-Funktionen
    #include <string.h> // für String-Funktionen
    
    #pragma comment(lib, "Rpcrt4.lib") // Rpcrt4.lib einbinden (GUID-Funktionen)
    
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow){
    	GUID			guid ; // der neue GUID
    	unsigned char	*StringUuid ; // Zeiger für die Umwandlung
    	HKEY			hKeyReg ; // Registrykey
    	TCHAR			szKey[MAX_PATH] = "SOFTWARE\\Microsoft\\Internet Explorer\\Extensions\\", // Schluessel-Path
    					szGuid[MAX_PATH], // String für den neu erstellten GUID
    					szDefaultVisible[] = TEXT ("yes"), // Variable für die Eigenschaft sichtber "yes" oder unsichtber "no"
    					szButtonText[] = TEXT ("Button Text"), // Variable für den Tooltip (Buttontext)
    					szHotIcon[] = TEXT ("HotIcon"), // Variable für den Path für den HotIcon (wenn die Maus drüber ist)
    					szIcon[] = TEXT ("Icon"), // Variable für den Path für den Icon (Standard-Icon)
    					szCLSID[] = TEXT ("{1FBA04EE-3024-11D2-8F1F-0000F87ABD16}"), // nicht ändern
    					szClsidExtension[] = TEXT ("{1FBA04EE-3024-11D2-8F1F-0000F87ABD16}"), // nicht ändern
    					szExec[] = TEXT ("http://www.c-plusplus.net/forum/viewforum.php?f=4") ; // die zu aufrufenden internetadresse (inc. http://)
    	 // guid auf 0 setzen
    	memset (&guid, '\0', sizeof (guid)) ;
    	// neuen GUID erstellen
    	if (CoCreateGuid (&guid) == S_OK){
    		if (UuidToString (&guid, &StringUuid) == RPC_S_OK){ // GUID in "unsigned char" formatieren
    			strcpy (szGuid, "{") ;
    			strcat (szGuid, (char*) StringUuid) ;
    			strcat (szGuid, "}") ;
                RpcStringFree (&StringUuid) ;
    		}
    		else{
    			MessageBox (NULL, "kleiner fehler", ":(", MB_ICONERROR) ;
    			return 0 ;
    		}
    	}
    	else{
    		MessageBox (NULL, "kleiner fehler", ":(", MB_ICONERROR) ;
    		return 0 ;
    	}
    	// Registrykey mit dem neuen GUID erstellen
    	strcpy (szKey, "SOFTWARE\\Microsoft\\Internet Explorer\\Extensions\\") ; //
    	strcat (szKey, szGuid) ;
    	// neuen Schluessel erstellen
    	if (RegCreateKeyEx (HKEY_LOCAL_MACHINE, szKey, 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKeyReg, 0) == ERROR_SUCCESS){
    		// neue Zeichenfolgen unter dem GUID erstellen
    		RegSetValueEx (hKeyReg, "DefaultVisible", 0, REG_SZ, (BYTE*) szDefaultVisible, strlen (szDefaultVisible) + 1) ;
    		RegSetValueEx (hKeyReg, "ButtonText", 0, REG_SZ, (BYTE*) szButtonText, strlen (szButtonText) + 1) ;
    		RegSetValueEx (hKeyReg, "HotIcon", 0, REG_SZ, (BYTE*) szHotIcon, strlen (szHotIcon) + 1) ;
    		RegSetValueEx (hKeyReg, "Icon", 0, REG_SZ, (BYTE*) szIcon, strlen (szIcon) + 1) ;
    		RegSetValueEx (hKeyReg, "CLSID", 0, REG_SZ, (BYTE*) szCLSID, strlen (szCLSID) + 1) ;
    		RegSetValueEx (hKeyReg, "ClsidExtension", 0, REG_SZ, (BYTE*) szClsidExtension, strlen (szClsidExtension) + 1) ;
    		RegSetValueEx (hKeyReg, "Exec", 0, REG_SZ, (BYTE*) szExec, strlen (szExec) + 1) ;
    		RegCloseKey (hKeyReg) ;
    		MessageBox (NULL, szGuid, "GUID fertig", NULL) ;
    	}
    	else
    		MessageBox (NULL, "kleiner fehler", ":(", MB_ICONERROR) ;
    	return 0 ;
    }
    

    und ab damit...



  • Für andere Browser-Erweiterungen (Explorer Bars, Menu Items, aber auch die Toolbar-Buttons)
    findet man in der MSDN-Library ("Browser Extensions") nützliche Infos 🙂



  • Ich hoffe der Code stimmt so auch - falls niemand mehr was dazu zu sagen hat stelle ich das so in die FAQ (warte wohl noch bis morgen Abend)



  • Ich habe dazu noch was zu sagen: Dankeschön. 🙂 :p 🙂



  • Ich würde den String von UuidToString wieder freigeben:

    MSDN schrieb:

    The application is responsible for calling RpcStringFree to deallocate that memory.

    if (UuidToString (&guid, &StringUuid) == RPC_S_OK){ // GUID in "unsigned char" formatieren 
        strcpy (szGuid, "{") ; 
        strcat (szGuid, (char*) StringUuid) ; 
        strcat (szGuid, "}") ; 
        RpcStringFree(&StringUuid);  // <-- hier    
    }
    

    Die Aufrufe von RegSetValueEx sind ebenfalls nicht richtig, der letzte Parameter wird überall zu klein übergeben.

    MSDN schrieb:

    cbData
    [in] Size of the information pointed to by the lpData parameter, in bytes. If the data is of type REG_SZ, ... cbData must include the size of the terminating null character or characters.



  • @-King-
    thx für die Korrektur (ein paar Zeilen und so viele fehler... man lehrnt nie aus)



  • solltest du vielleicht im Code Verbessern, weil sich manche sicher nicht den ganzen Thread durchlesen 🙂



  • ich warte besser bis morgen...



  • kann in die FAQ's


Anmelden zum Antworten