![]() |
"Senden an" im Context Menu ansprechen
Hallo Delphi-Freunde,
ich hab ein kleines Problemchen, bei dem ich einfach nicht weiterkomme. Ihr habt doch bestimmt schon alle mal mit der rechten Maustaste auf ne Datei geklickt, dann kommt doch dieses Context Menu hoch und je nachdem, was das für eine Datei war, sind da ganz viele lustige Einträge drin. Ich möchte jetzt einen dieser Einträge (speziell das "Senden an"-Menu) codetechnisch aufrufen. Hat einer von euch da eine Ahnung wie man das macht? Ich möchte nicht den Schlüssel aus der Regestry auslesen und das darüber machen und ich möchte auch nicht aus einer Datei heraus das "Senden an"-Menu aufrufen, es geht nur darum genau das gleiche aufzurufen, als wenn man die rechte Maustaste benutzt. In der Shell gibt es so einen Befehl "invoke", damit kann man eigentlich diese Einträge ausführen, aber leider kann ich irgendwie nicht in das Untermenü "Senden an" verzweigen. Einer eine Idee? mfg, einsTeIn.NET |
Re: "Senden an" im Context Menu ansprechen
Das 'Senden an' Menü ist kein Registry-Eintrag. Das sind ganz normale Verknüpfungen wie im StartMenü. Schaumal unter %HOMEDIR%\SendTo an, da sind die Verknüpfungen drinne.
|
Re: "Senden an" im Context Menu ansprechen
Zitat:
2. Dabei wird auch automatisch ein Registry-Eintrag generiert. Jedenfalls steht das so auf einer Seite, die beschreibt wie man in den jeweiligen Windows-Versionen diesem Menu einen Eintrag hinzufügen kann. 3. Leider ist mir das auch vollkommen egal, ob oder was das jetzt ist, ich will das nur ausführen und zwar möglichst über irgendeine API-Funktion. 4. Trotzdem danke. :) |
Re: "Senden an" im Context Menu ansprechen
|
Re: "Senden an" im Context Menu ansprechen
Zitat:
|
Re: "Senden an" im Context Menu ansprechen
Das gibt´s auch bei Windows 98.
IMHO gab es das sogar in Win 95 schon. |
Re: "Senden an" im Context Menu ansprechen
|
Re: "Senden an" im Context Menu ansprechen
So! Ich hatte zwar jetzt endlich mal Zeit mich weiter um das Thema zu kümmern, aber leider komme ich nicht weiter.
Das war zwar soweit ein guter Tipp von Franz und das hat mich auch schon näher rangebracht, aber leider funktioniert das doch nicht so. Es gibt zwar neben der von mir schon angesprochenen Funktion Invoke auch noch die Funktion InvokeCommand, mit der man das eigentlich auch machen könnte. Sie befindet sich im Interface IContextMenu, was man wiederum in der Shell32.dll ab der Version 4.0 findet. Hört sich alles prima an und klappt bestimmt auch prima, aber leider aus meinem Kontext heraus nicht. Ich beschreibe vielleicht mal das eigentliche Problem, da ich diese Idee hier jetzt eigentlich abgeschrieben habe. Vielleicht fällt ja einem eine andere Lösung ein... Ich muß aus einer Datenbank heraus die verschiedenen Drucker des Systems ansprechen können. [Also eigentlich ist es auch kein Delphi, aber das tut ja nichts zur Sache. Ich würde mich vielleicht dazu entschließen eine .dll zu schreiben, die im Prinzip etwas ähnliches bietet wie das IContextMenu-Interface und die ich aber aus der Datenbank heraus ansprechen kann, und die würde ich dann in Delphi schreiben.] Problem dabei ist, in der Datenbank können jetzt verschiedene Dateien gespeichert sein und die sollen gedruckt werden. Diese Dateien können jeglichen Typs sein, was bedeutet, man weiß nie vorher, von welchem Programm man die Print-Routine aufrufen soll. An die Invoke-Funktion komme ich auch aus der Datenbank heraus ran, d.h. es wird im Moment so gemacht, das die Datei temporär ausgelagert wird und dann diese Invoke-Funktion auf der Option "Print" ausgeführt wird. Also im Prinzip, als wenn man z.B. auf ne Excel-Datei mit der rechten Mousetaste klickt und dann "Drucken" aufruft, was dazu führt, daß das System das mit dieser Endung verküpfte Programm aufruft, die Datei in dieses Programm läd, die Standard-Druckroutine des Programms ausführt und danach die Datei und das Programm wieder schließt. Allerdings wird hierbei immer auf den Standard-Drucker des Systems gedruckt. Und das ist mein Problem, ich möchte das variable gestalten. Daher habe ich nach einer Möglichkeit gesucht, eine Druckerauswahl in das Contextmenu hineinzubekommen, damit ich mir dann ganz bequem den Drucker darüber aussuchen kann. Hierbei bin ich dann darauf gestoßen, daß man sich eine bestimmte Verknüpfung in den "Senden an"-Ordner legen kann, damit man im Contextmenu die Drucker des Systems sehen kann und nur noch die Datei übergeben muß. Funktioniert aus Windows heraus wunderbar, aber leider in meinem Fall nicht so gut, bzw. ich habe das noch nicht hinbekommen, kann ja trotzdem sein, daß es irgendwie geht. An diese andere Funktion InvokeCommand komme ich leider nicht aus der Datenbank heraus ran, keine Ahnung warum. :?: :cry: P.S. Die Drucker kann ich mir in der Datenbank auflisten lassen, das bekomme ich hin. Ich muß also Windows nur sagen, daß er diese Datei (aus der Datenbank) an jenen Drucker senden soll, falls das eine Hilfe für einen Lösungsansatz sein kann. mfg, einsTeIn.NET |
Re: "Senden an" im Context Menu ansprechen
@einsTeIn.NET,
In der Windows 32 SDK Referenz habe ich zwei Themen gefunden, die dir wahrscheinlich helfen werden. 1. Modifying the Context Menu for a File Class Zitat:
%2 = Druckername %3 = Treibername (optional) %4 = Anschluss (optional) 2. ShellExecute Zitat:
Ich hab’s zwar nicht ausprobiert aber auf die Schnelle habe ich folgendes Beispiel aufgestellt, damit du weißt, wie ShellExecute verwendet werden kann:
Delphi-Quellcode:
Ganz wichtig ist dabei, dass der Druckername von doppelten Anführungszeichen umschlossen wird. Die Namen der installierten Drucker findest du in der Windows Registrierung unter HKEY_CURRENT_CONFIG\System\CurrentControlSet\Contr ol\Print\Printers.
ShellExecute(Handel, PChar('print'), PChar('C:\Eigene Dateien\Meine Datei.txt'), PChar('„Druckername“'), nil, SW_ShowNormal);
Damit ShellExecute verwendet werden kann, muss die Unit ShellAPI in die USES Klausel aufgenommen werden. Da es bei den „Senden an“ Menüeinträgen sich um Verknüpfungen handelt, solltest du dir auch die Themen: „Shell Links“, „About Shell Links“, „Using Shell Links“, „Creating a Shortcut to a File“ und „Creating a Shortcut to a Nonfile Object“ in der Windows 32 SDK Dokumentation anschauen. Ich hoffe, dass ich die weiterhelfen konnte. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz