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

8

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 in einem Ordner auf nichts klicken ?

Wenn ich einen neuen Ordner auf meinem Desktop erstelle, doppelklicken Sie, um den Ordner aufzurufen, und klicken Sie dann mit der rechten Maustaste auf nichts (der Ordner ist leer). Jetzt soll mein Kontextmenü in dieser Situation angezeigt werden.

xero
quelle
Ich denke, der Schlüssel, den Sie wollen, istHKEY_CLASSES_ROOT\Directory\Background
Andrew Lambert
1
Danke @Amazed das war wirklich nah ... es ist eigentlich: [HKEY_CLASSES_ROOT\Directory\Background\shell\commandNameHere]
xero
5
Für alle Interessierten ist hier die .REG-Datei gelöst , 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"
xero
2
Es ist erlaubt und ermutigt, Ihre eigenen Fragen zu beantworten. Wenn Sie Ihr Problem gelöst haben, senden Sie eine Antwort und akzeptieren Sie sie.
Dennis

Antworten:

10

Für alle Interessierten ist hier 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"

(Entnommen aus Xeros Kommentar )

Dies fügt dem Kontextmenü "git bash here" einen Befehl mit einem Symbol hinzu, 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 "Hintergrund" klicken
Dennis
quelle
2
Beachten Sie den Wert "none" für die Standardaktion ('@ ='). Ohne dieses 'none' behandelt Windows eine der hinzugefügten Aktionen als Standard. Wenn Sie also auf ein Verzeichnis doppelklicken, wird das Verzeichnis nicht mehr geöffnet, sondern die Aktion ausgelöst - was Windows fast unbrauchbar macht. -> Wenn Sie "Keine" als Standardaktion festlegen, können Sie Kontextmenüelemente hinzufügen, ohne das Standardverhalten von Windows zu ändern.
0
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;}
Kashif Meo
quelle
Dies wird Ihr Kontextmenü in allen Ordnern anzeigen ... Wenn Sie diesen Code kompilieren, stellen Sie sicher, dass Sie über Administratorrechte verfügen. Ich hoffe, dieser Code ist hilfreich für Sie
Kashif Meo
1
Könnten Sie Ihre Antwort bearbeiten , um etwas mehr zu erklären, was Ihr Code tut?
Burgi
Dies könnte zwar die Frage beantworten, aber es wäre eine bessere Antwort, wenn Sie eine Erklärung dafür liefern könnten .
DavidPostill
Tatsächlich erstellt dieser Code nur einen neuen Schlüssel für das Kontextmenü. Schlüssel und Unterschlüssel auch ihre Werte. Wenn dieser Code kompiliert und dann in jedem Ordner ausgeführt wird, wird das Kontextmenü angezeigt ...
Kashif Meo
aber ich denke, Frage req ist geändert .. es kann ihm helfen, aber nicht die genaue Lösung ..
Kashif Meo