Wie fügt man dem Kontextmenü eines Ordners ein Element hinzu?

Wie fügt man dem Kontextmenü eines Ordners ein Element hinzu?

Ich weiß, wie man ein Kontextmenü hinzufügt, wenn man auf einen tatsächlichen Ordner klickt:

[HKEY_CLASSES_ROOT\Directory\shell\commandNameHere]

aber wie wäre es, wenn Sie auf nichts klickenin einem Ordner?

Ich erstelle beispielsweise einen neuen Ordner auf meinem Desktop, öffne den Ordner mit einem Doppelklick und klicke dann mit der rechten Maustaste ins Leere (der Ordner ist leer). Jetzt möchte ich, dass in dieser Situation mein Kontextmenü angezeigt wird.

Antwort1

Für alle, die es interessiert: Hier ist die .regDatei, um diese Funktionalität zum Windows-Kontextmenü hinzuzufügen:

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\Shell]
@="none"
[HKEY_CLASSES_ROOT\Directory\shell\gitBashHere]
[HKEY_CLASSES_ROOT\Directory\Background\shell\gitBashHere]
"Icon"="C:\\icons\\git-gui.ico"
"MUIVerb"="git bash here"
"Position"="bottom" 
[HKEY_CLASSES_ROOT\Directory\shell\gitBashHere\command] 
[HKEY_CLASSES_ROOT\Directory\Background\shell\gitBashHere\command]
@="C:\\Program Files\\Console2\\Console.exe -d %v"

(Genommen vonKommentar von xero)

Dadurch wird dem Kontextmenü ein Befehl mit dem Namen „git bash here“ mit einem Symbol hinzugefügt, das eine Konsole öffnet.

Der Befehl wird unter beiden hinzugefügt:

  • HKEY_CLASSES_ROOT\Directory\shell, das Kontextmenü, wenn Sie mit der rechten Maustaste auf einen Ordner klicken
  • HKEY_CLASSES_ROOT\Directory\background, das Kontextmenü, wenn Sie in einem Ordner mit der rechten Maustaste auf den leeren Bereich im Hintergrund klicken

Antwort2

void WriteContextMenu(LPSTR key, LPSTR value) {

HKEY hkey=0; DWORD disp;

if(RegCreateKeyEx(HKEY_CLASSES_ROOT, key, 0, NULL, REP_OPTION_NON_VOLATILE, KEY_WRITE,NULL, &hkey, &disp)!=ERROR_SUCCESS) 

{

     if(RegOpenKey(HKEY_CLASSES_ROOT,key,&hkey)!=ERROR_SUCCESS)
    {   

      cout<<"Unable to open Registry"<<key;

        }

}if(RegSetValueEx(hkey,TEXT(""),0,REG_SZ,(LPBYTE)value, strlen(value)*sizeof(char))!=ERROR_SUCCESS)

{

   RegCloseKey(hkey);

       cout<<"Unable to set Registry Value ";

} else{

   cout<<value<<" value has set"<<endl;
}
}int main(){LPSTR key="Folder\\shell\\Testing_App"; 

 LPSTR valueKey="Menu_Title";

 LPSTR Subkey="Folder\\shell\\Testing_App\\command";


/*Here put the path or action you want to perform like you want to
    open cmd  on your context menu so the value id */

    LPSTR valueSubKey="cmd.exe";

    WriteContextMenu(key, ValueKey); 
    WriteContextMenu(Subkey, ValueSubKey);

return 0;}

Antwort3

Hier ist eine Lösung für alle Kontextmenüs.

https://stackoverflow.com/questions/20449316/how-add-context-menu-item-to-windows-explorer-for-folders/20458056#20458056

Aber wie übergebe ich mehrere Verzeichnisse oder Dateien als Argumente an dieses Kontextmenü, da %1 nur eines annimmt und wenn wir Strg+Klick auf mehrere Dateien drücken, wird die ausführbare Datei mehrmals geöffnet, anstatt sie alle als Argumente zu senden.

verwandte Informationen