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