Rechtsklickmenü verändern
-
Igeeky schrieb:
Habe ich das so richtig verstanden? Und ist das "%1" in der Registry bereits
eine Art Variable für das Ziel (also hier c:\meinedatei.txt") ?
Die "%1" bezeichnet den ersten Parameter. Bei einem Rechtsklick wird der Dateiname als erster Parameter übergeben und der eben dann deinem Programm.
-
also erstmal danke für die Antworten, ich werde das heute mal ausprobieren.
-
es funktioniert!

danke
-
Ich hänge mich mal an das Thema an.
Geht das ganze auch mit dem Rechtsklickmenü für Ordner, oder
nur für Dateien? In der Registry habe ich ncihts dergleichen für
Ordner finden können.
-
gefunden!
CLASSES_ROOT\Directory\shell\
-
noch ne Frage:
wie kann ich es machen, dass ich in das Kontextmenü ein Ppup-Menü einfüge,
welches dann wiederum 2 Menüeinträge besitzt?also:
Öffnen
Öffnen mit...
Mein Popup -> Mein Eintrag 1
Mein Eintrag 2
...geht das? und wenn ja, wie?
-
Das geht leider nicht so einfach. Dafür brauchst Du ne DLL, die man über COM schreiben muss.
-
naja, wie kompliziert das ist, interessiert mich eher weniger.
da mich das wirklich mal interessieren würde, wie das geht,
würde ich mich trotz hohem Schwierigkeitsgrad über Hilfe freuen.
-
Hätte da eine Frage - ist das unter Windows Vista immer noch problemlos möglich? Oder könnte es sein, daß mein Programm dann mangels nötiger Zugriffsrechte irgendwie abgewürgt wird (habe leider kein Vista mehr drauf, wo ich das testen könnte)?
-
Afaik dürfen Programme nur mit Admin-Rechten in die Registry schreiben. Bzw ohne Admin-Rechte wird deinem Programm der Erfolg vorgegaukelt, die Registry ändert sich dadurch aber nicht :p
-
Hmm super... kommt nichtmal dieser UAC-Scheiß mit der Meldung "Da will sich grad ein Programm in die Reg eintragen, soll ich?"
Ich meine allerdings, ich hätte damals WinRAR unter Vista installiert (was ja regen Gebrauch vom Rechtsklick-Menü macht), und ich glaube auch nicht, daß ich unter Admin eingeloggt war (zumindest wurde ich ständig von UAC "begleitet").
-
Hmm... Kann auch sein, dass Vista vorher nachfragt, wäre ja sinnvoll. Wer dann "Nein" anklickt, ist einfach selber schuld, also schreib dein Proggi ganz normal

-
Naja würde ich ja gern

Allerdings hab ich z.B. auch gehört, daß Programme NICHT mehr in ihr Programm-Verzeichnis schreiben dürfen, sondern NUR noch unter "Anwendungsdaten". Was ich jetzt nicht besonders schlimm finde - aber man muß es halt wissen. Allerdings weiß ich jetzt auch nicht, unter welchen Voraussetzungen das so ist (Admin-Modus etc), oder ob das permanent so ist. Hab das für meine neue Software allerdings schon umgesetzt
Und bei der Sache mit der Reg wäre es halt auch wichtig. Ich könnte mir zwar vorstellen, daß man problemlos in unter HKEY_LOCAL_USER und dann unter "Software" sein Zeug reinschmeißen darf, aber ob das mit den Shell-Extensions noch geht, ist die andere Frage...
Ich hatte Vista auf meinem neuen Laptop, aber da es mir nicht gescheit möglich war, parallel XP zu installieren (dank Recovery-CD-only und der Tatsache, daß Partitionen verkleinern unter Vista eine sehr eklige Sache ist), hab ich es komplett gekickt und somit nun kein Vista-Testsystem mehr... und ich kenn auch niemand, der Vista hat, was ich auch verstehen kann

Naja vielleicht hat ja hier jemand Vista und kann das mal testen? Ich werd auch noch ein bißchen im Internet suchen, irgendwo muß es doch eine Seite geben, wo einige Programmier-Stolperfallen für Vista aufgeführt sind...
-
Ich könnte als Testpferd dienen
Ich nehme aber keine Exe-Dateien, sondern will den Source selber kompilieren... Nur damit ich auch sehe, was das Prog so macht 
Compiler hab ich MSVC++ 2003 + 2005. Könntest mir also einfach einen kleinen Script zum Kontextmenü-hinzufügen schicken, und dann bitte auch einen zum wieder-entfernen. Vor dem WE hab ich aber keine, oder nur wenig Zeit, bis dahin könnte es also dauern..

-
Naja das Beispiel aus dem zweiten Posting müßte doch eigentlich ausreichen:
static const TCHAR CONTEXT_APP_LOC[] = TEXT("*\\shell\\Open With MyApp"); static const TCHAR CONTEXT_APP_LOC[] = TEXT("*\\shell\\Open With MyApp\\command"); void AddToExplorerContext() { TCHAR szAppPath[MAX_PATH]; TCHAR szDefaultStr[MAX_PATH]; GetModuleFileName(NULL, szAppPath, MAX_PATH); wsprintf(szDefaultStr, TEXT("\"%s\" \"%%1\""), szAppPath); RegSetValue(HKEY_CLASSES_ROOT, CONTEXT_CMD_LOC, REG_SZ, szDefaultStr, lstrlen(szDefaultStr) * sizeof(TCHAR)); } void RemoveFromExplorerContext() { RegDeleteKey(HKEY_CLASSES_ROOT, CONTEXT_CMD_LOC); RegDeleteKey(HKEY_CLASSES_ROOT, CONTEXT_APP_LOC); }Nur daß da noch ein kleiner Fehler drin ist, Zeile 2 müßte CONTEXT_CMD_LOC beinhalten statt CONTEXT_APP_LOC.
Dazu noch eine kurze main(), die die erste Funktion aufruft, und schon müßte es laufen. Den Ort der EXE ermittelt er ja von selbst und trägt sich dann einfach kurz ein, und zwar für jeden Dateityp (wegen "*").
EDIT: Habe es gerade unter XP getestet, funktioniert. Du mußt es halt mit advapi32.lib und user32.lib linken, und Du mußt windows.h includen. Er trägt sich dann für alle Dateitypen ein, aber nicht für Verzeichnisse.
-
Hatte grad doch noch Zeit und hab's getestet... Als Administrator geht's problemlos. Mit dem Gast-Benutzerkonto geht es nur, wenn die UAC eingeschaltet war und man das Programm als Administrator ausführt.
-
Ist das Gast-Benutzerkonto gleichwertig mit einem "normalen" Benutzerkonto?
Und was ist, wenn einer UAC ausgeschaltet hat? Passiert dann überhaupt nix?