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 .reg
Datei, 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 klickenHKEY_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.
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.