AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi "Senden an" im Context Menu ansprechen
Thema durchsuchen
Ansicht
Themen-Optionen

"Senden an" im Context Menu ansprechen

Ein Thema von einsTeIn.NET · begonnen am 4. Aug 2004 · letzter Beitrag vom 21. Sep 2004
Antwort Antwort
Benutzerbild von einsTeIn.NET
einsTeIn.NET

Registriert seit: 22. Mär 2003
Ort: Bochum
7 Beiträge
 
#1

"Senden an" im Context Menu ansprechen

  Alt 4. Aug 2004, 22:02
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
  Mit Zitat antworten Zitat
rantanplan99
(Gast)

n/a Beiträge
 
#2

Re: "Senden an" im Context Menu ansprechen

  Alt 4. Aug 2004, 22:08
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.
  Mit Zitat antworten Zitat
Benutzerbild von einsTeIn.NET
einsTeIn.NET

Registriert seit: 22. Mär 2003
Ort: Bochum
7 Beiträge
 
#3

Re: "Senden an" im Context Menu ansprechen

  Alt 4. Aug 2004, 22:19
Zitat von rantanplan99:
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.
1. Das ist erst glaube ich ab XP oder Me mit dem Ordner so.
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.
  Mit Zitat antworten Zitat
franz

Registriert seit: 23. Dez 2003
Ort: Bad Waldsee
112 Beiträge
 
Delphi 5 Professional
 
#4

Re: "Senden an" im Context Menu ansprechen

  Alt 5. Aug 2004, 01:03
Hi,
dieses Problem hat mich fast 3 Monate beschäftigt.

Sieh dir mal das Thema an
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#5

Re: "Senden an" im Context Menu ansprechen

  Alt 5. Aug 2004, 11:35
Zitat von einsTeIn.NET:
1. Das ist erst glaube ich ab XP oder Me mit dem Ordner so.
Ab 2000 auch schon
Alexander
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#6

Re: "Senden an" im Context Menu ansprechen

  Alt 5. Aug 2004, 11:40
Das gibt´s auch bei Windows 98.
IMHO gab es das sogar in Win 95 schon.
  Mit Zitat antworten Zitat
Benutzerbild von Steve
Steve

Registriert seit: 2. Mär 2004
Ort: Würzburg
730 Beiträge
 
Delphi 2006 Personal
 
#7

Re: "Senden an" im Context Menu ansprechen

  Alt 5. Aug 2004, 11:42
Auch 98 hat "bereits" den SendTo-Ordner
achja: c't-Artikel-Überischt

Gruß
Stephan
Stephan B.
Wer andern eine Grube gräbt ist Bauarbeiter!
Wer im Glashaus sitzt, sollte sich lieber im Dunkeln ausziehen!
Außerdem dieser Satz kein Verb...
  Mit Zitat antworten Zitat
Benutzerbild von einsTeIn.NET
einsTeIn.NET

Registriert seit: 22. Mär 2003
Ort: Bochum
7 Beiträge
 
#8

Re: "Senden an" im Context Menu ansprechen

  Alt 31. Aug 2004, 22:53
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.

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
  Mit Zitat antworten Zitat
franz

Registriert seit: 23. Dez 2003
Ort: Bad Waldsee
112 Beiträge
 
Delphi 5 Professional
 
#9

Re: "Senden an" im Context Menu ansprechen

  Alt 21. Sep 2004, 23:25
@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:
Delphi-Quellcode:
… HKEY_CLASSES_ROOT
  wrifile = Write Document
      shell
        open
          command = C:\Progra~1\Access~1\WORDPAD.EXE %1
            print
               command = C:\Progra~1\Access~1\WORDPAD.EXE /p "%1"

            printto
              command = C:\Progra~1\Access~1\WORDPAD.EXE /pt "%1" "%2" "%3" "%4" …
printto = Drucken mit

… In the preceding commands, the %1 parameter is the filename, %2 is the printer name, %3 is the driver name, and %4 is the port name. In Windows 95, you can ignore the %3 and %4 parameters (the printer name is unique in Windows 95) …
%1 = Dateiname
%2 = Druckername
%3 = Treibername (optional)
%4 = Anschluss (optional)

2. ShellExecute
Zitat:
The ShellExecute function opens or prints a specified file. The file can be an executable file or a document file. See ShellExecuteEx also.

HINSTANCE ShellExecute(
HWND hwnd, // handle to parent window
LPCTSTR lpOperation, // pointer to string that specifies operation to perform
LPCTSTR lpFile, // pointer to filename or folder name string
LPCTSTR lpParameters, // pointer to string that specifies executable-file parameters
LPCTSTR lpDirectory, // pointer to string that specifies default directory
INT nShowCmd // whether file is shown when opened
); ...
Beispiel
Ich hab’s zwar nicht ausprobiert aber auf die Schnelle habe ich folgendes Beispiel aufgestellt, damit du weißt, wie ShellExecute verwendet werden kann:

ShellExecute(Handel, PChar('print'), PChar('C:\Eigene Dateien\Meine Datei.txt'), PChar('„Druckername“'), nil, SW_ShowNormal); 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.

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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz