dmo
Goto Top

kompletten Dateipfad von Netzlaufwerk an Outlook übergeben

Hallo all,

ich habe ein .vbs mit dem per Rechtsklick auf eine Datei (egal was für eine -.txt,.jpg etc.), der Pfad an Outlook übergeben wird. Vorraussetzung ist eine Datei auf einem Netzlaufwerk. Das funktioniert auch schon bis auf die letzte Ebene, nur der Dateiname inkl. extension fehlt noch.
Bin für jede Hilfe dankbar.

Hier mal das Script.

Option Explicit
Dim ol, mail
Dim strg, sKey
Dim WshShell, wsshell
Dim fso, path, path2, path3

'Regeintrag generieren
Set Wsshell = WScript.CreateObject("WScript.Shell")
Wsshell.RegWrite "HKCR\*\Shell\Pfad senden\command\", "wscript ""C:\temp\sendpath.vbs""%1", "REG_SZ"

'Pfad vom Explorer auslesen
Set fso = CreateObject("Scripting.FileSystemObject")
path = fso.GetAbsolutePathName(".")
path2 = path
path = Left(path, 1)
path2 = Mid(path2,3)
'Wscript.Echo (path2) 'Ausgabe des ersten Zeichen

'Pfad aus der Registry
Set WshShell = CreateObject("WScript.Shell")
sKey = "HKEY_CURRENT_USER\NETWORK\" & path & "\RemotePath" 'UNC mit Explorer Letter wählen
strg = WshShell.RegRead(sKey) 'Ausgabe des Pfades der Registry
'wscript.echo strg

'Link an Outlook übergeben
Set ol = CreateObject ("Outlook.Application")
Set mail = ol.CreateItem(0)
mail.body = "Dateilink: " & strg & path2
mail.Display

Ich hab auch interesse an eleganteren Lösungen.

Gruß und Dank
dmo

Content-ID: 29303

Url: https://administrator.de/tutorial/kompletten-dateipfad-von-netzlaufwerk-an-outlook-uebergeben-29303.html

Ausgedruckt am: 23.12.2024 um 03:12 Uhr

Biber
Biber 31.03.2006 um 00:45:52 Uhr
Goto Top
Moin dmo,
so sollte es etwas besser gehen:
'--snipp c:\temp\sendpath.vbs  
Option Explicit
Dim ol, mail
Dim strg, sKey
Dim WshShell ', wsshell  
Dim fso, path, DriveLetter
Dim Debug
Debug=False ' auf TRUE setzen für Meldungen  
'---- Einmalig--nicht hier-- Dim wsshell  
'---- Einmalig--nicht hier-- Regeintrag generieren  
'---- Einmalig--nicht hier-- Set Wsshell = WScript.CreateObject("WScript.Shell")  
'---- Einmalig--nicht hier-- Wsshell.RegWrite "HKCR\*\Shell\Pfad senden\command\", _  
'---- Einmalig--nicht hier-- "wscript ""C:\temp\sendpath.vbs""%1", "REG_SZ"  

'Pfad vom Explorer auslesen  
Set fso = CreateObject("Scripting.FileSystemObject")   
if Debug then wscript.echo fso.GetAbsolutePathName(wscript.arguments(0))
path=fso.GetAbsolutePathName(wscript.arguments(0))
DriveLetter = Left(path, 1)
path = Mid(path,3)
if Debug then  Wscript.Echo "DriveLetter " & DriveLetter 'Ausgabe des ersten Zeichen  

'Pfad aus der Registry  
Set WshShell = CreateObject("WScript.Shell")   
On Error resume Next ' falls es kein Netzwerk-Drive ist...dann lassen wir ihn so.  
sKey = "HKEY_CURRENT_USER\NETWORK\" & DriveLetter & "\RemotePath" 'UNC mit Explorer Letter wählen  
strg = WshShell.RegRead(sKey) 'Ausgabe des Pfades der Registry  
Set WshShell = Nothing
if (len(Strg) = 0) then 
  strg=DriveLetter & ":"  
else
  if Debug then wscript.echo "Strg aus REG: [" & strg &"]"  
End if 
if Debug then wscript.echo "Strg + path: [" & strg & path & "]"  
'Link an Outlook übergeben   
Set ol = CreateObject ("Outlook.Application")   
Set mail = ol.CreateItem(0)
mail.body = "Dateilink: " & strg & path  
mail.Display
'--snapp c:\temp\sendpath.vbs  

Anmerkungen dazu:
- Das Schreiben dieses Kontexteintrags hat nichts in diesem *.vbs-Schnipsel zu suchen. Das ist eine einmalige Aktion.
- Du hast bisher mit GetAbsolutePathname(.) den Pfad des gerade aktuellen Verzeichnisses ermittelt. Kann passen, muss aber nicht.
- Du kannst den Schnipsel testen vom CMD-Prompt aus mit
cscript //nologo c:\temp\sendpath.vbs c:\temp\sendpath.vbs 
-oder-
cscript //nologo c:\temp\sendpath.vbs Y:\Share\MeineDateiAufmNetzlaufwerk.xyz
Hope That Helps
Biber
[Edit] Die unten erwähnten Tippfehler sind im Source korrigiert.[/Edit]
dmo
dmo 04.04.2006 um 09:45:08 Uhr
Goto Top
Hallo und vielen Dank für die Hilfe.

Ich habe es getestet und es geht zumindest in und aus der Dos-Box.

Das letzte zu fixende Problem ist nun noch der Eintrag ins Kontextmenu.
Ist der Teil zum Eintrag in die Reg, welcher natürlich noch ausgelagert wird, syntaktisch richtig?
Ich probiere hier schon hin und her. Habe auch überlegt, vieleicht doch nur in das "senden an" Menu und garnicht in die Registry. Ich denke Kontext läßt sich beim User besser einprägen, da gleich sichtbar.

Naja wie auch immer. Ich testete den getunten Schnipsel noch mit dem zu entfernenden Regeintrags-part ;o). Und irgendwie gibts da einen komischen effekt.

Und zwar:
Bei einem NW-Pfad bei dem ein Ordner ein Leerzeichen beinhaltet bricht das Script bei dem Leerzeichen ab.

Bei z.B. Y:\Service MGMT\xyz\datei.txt
kommt die Meldung "C:\temp\sendpath.vbsY:/Service" hat keine Dateierweiterung.

oder

Bei z.B. Y:\Betrieb\Files\datei.xls
kommt die Meldung: Für die Dateierweiterung ".xls" gibt es kein Skriptmodul.

Ich brauche dafür noch mal Hilfe und Erklärung, damit ich das mal verstehe.
Biber
Biber 04.04.2006 um 12:01:51 Uhr
Goto Top
Sorry, dmo,

ich hatte noch zwei Tippfehler drin (ich hatte es nicht getestet, nur runtergetippt *schäm*):

Hier:
sKey = "HKEY_CURRENT_USER\NETWORK\" & path & "\RemotePath" 'UNC mit Explorer Letter wählen

heißt es natürlich:
sKey = "HKEY_CURRENT_USER\NETWORK\" & DriveLetter & "\RemotePath" 'UNC mit Explorer Letter wählen
-oder-
sKey = "HKCU\NETWORK\" & DriveLetter & "\RemotePath" 'UNC mit Explorer Letter wählen

und hier:
Set WshShell = Null
natürlich
Set WshShell = Nothing

Die Reg-Datei dafür sieht bei mir so aus:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\Shell\Send To OL as UNCName]

[HKEY_CLASSES_ROOT\*\Shell\Send To OL as UNCName\command]
@="wscript d:\\temp\\uncpath.vbs \"%1\""  
Anm.: passend aufs obige Skript natürlich: [@="wscript c:\\temp\\sendpath.vbs \"%1\""]
Gruß
Biber
dmo
dmo 04.04.2006 um 18:18:49 Uhr
Goto Top
Hallo Biber,

das sorry muss nicht sein, da ich sehr dankbar für Deine Hilfe bin.
Ich probier das mal und danke aber vorab dafür.

Meld mich dann mal
Gruß DMO
dmo
dmo 11.04.2006 um 09:33:46 Uhr
Goto Top
Hallo Biber,

also ich habe das script nun getestet und es rockt vom feinsten. Was nicht alles geht.

Dank Dir sehr.

Habe nun für mein Studium mit C++ und QT so meine Beschäftigung.
hope to c u here, next

MFG
dmo
Biber
Biber 11.04.2006 um 09:54:25 Uhr
Goto Top
Thx, dmo,
für die Rückmeldung.

Ich fand Deine Idee ja auch ganz anregend und habe diese Kontextmenü-Erweiterung auch bei meinem Rechner drin gelassen.
In irgendeiner Mittagspause werde ich das bei mir noch mal dahingehend abändern, dass ich den UNC-Pfad in die Zwischenablage kopiere statt in eine neue (leere) Mail. Denn meistens brauche ich diese UNC-Pfade ja doch, wenn ich anderen Verweise auf Dateien mailen will. So wie Du auch. Aber ich fange normalerweise ja keine Mail damit an, dass ich als erst den Datei-Link einfüge und danach den eigentlichen Mailtext davor schreibe.
Ist aber nur eine Variation Deines Ansatzes.

Das ist ja das Schöne an Batch, Skripts und. Beton - es kommt immer darauf an, was man/frau daraus macht....

Kannst Du bitte diesen Beitrag auf "Gelöst" setzen? Kann nur der Thread-Ersteller, weil dieses hier (VB/VBA..) ein Mod-loser Anarcho-Bereich ist.

Viel Spaß mit C++ und den Q-Tipps
Biber
dmo
dmo 11.04.2006 um 12:43:52 Uhr
Goto Top
Hallo Biber,

ich habe noch einen Bug gefunden, der eigentlich keiner ist.
Soll heißen, dass das Script den UNC Pfad nicht auslesen kann, wenn das Network-Drive nicht automatisch vom System gemappt wird. Dann steht auch kein Drive Eintrag in der Registry. z.B. werden Homeshares ja oft über den User Account im AD gemappt. Nun gibt es ja die Möglichkeit, dies mit WMI zu machen, denn mit dem Befehl net use in der cmd kann ich ja den UNC-Pfad sehen.
Da habe ich folgende Idee bei --www.vbarchiv.net/archiv/tipp_264.html-- gefunden. Nur weiß ich nicht wirklich, wie ich das implementieren kann. Hast Du eine Idee? Ich bin noch auf Lösungssuche.

viele Grüße
dmo
Biber
Biber 11.04.2006 um 13:23:54 Uhr
Goto Top
Hm, dmo,

der Weg wäre mir zu steinig...
Da würde ich (schon wegen meiner mir angeborenen Faulheit) eher aus VBS einen Shellaufruf (oder Batchaufruf) machen mit "Net use|find X:>out.tmp"
Wenn X: ein Netzlaufwerk ist, dann steht im dritten Token der "\\server\share.."-Name.
Oder, wenn es in VBS einfacher zu ermitteln ist, alles ab "\\" inclusive.

Eine API-Funktion in VBS einbinden.. bin ich nicht sicher, ob das geht.

Und, ich sehe es schon kommen, dann gehen uns immer noch mögliche SUBST-Laufwerke durch die Lappen... auch die müsste man/frau bei so einem TRUENAME-Clone einbauen.

Mal sehen, wenn ich mal eine gaaaaaaaaaaanz lange Mittagspause habe.. face-wink
Gruß
Biber
dmo
dmo 11.04.2006 um 13:38:17 Uhr
Goto Top
Hallo Biber,

aaah- genial einfacher Lösungsansatz, ich denke mich mal rein.
Mal sehen, wer zuerst die längste Pause hat.
Was meinst Du mit SUBST-LW?

viele Grüße
der ;o) dmo
Biber
Biber 11.04.2006 um 13:46:15 Uhr
Goto Top
...diese hier:
(am CMD-Promptface-smile

subst u: d:\temp
( D:\temp lässt sich sich als laufwerk U: ansprechen)

subst
U:\: => D:\temp

(so wird es abgefragt).

Ist ein bisschen aus der Mode gekommen, aber theoretisch noch zu berücksichtigen.
Aber nur von Perfektionisten.

Gruß
Biber
dmo
dmo 11.04.2006 um 14:17:32 Uhr
Goto Top
... also im Prinzip eine Substitiution. Da leuchtet doch glatt das SUBST ein.

viele Grüße
dmo
Biber
Biber 18.04.2006 um 11:45:11 Uhr
Goto Top
So,
der Vollständigkeit noch eine Variation des Themas - UNCPath2.vbs mit gleicher Funktionalität, aber Ermittlung der Netzlaufwerke über einen einfacheren Weg.

'--snipp c:\temp\UncPath2.vbs  
Option Explicit
Dim ol, mail
Dim strUncPfad, WShNetwork, coldrives, i
Dim fso, path, DriveLetter
Dim Debug
Debug=False ' auf TRUE setzen für Meldungen  
' übergebenen Pfad vom Explorer auslesen  
Set fso = CreateObject("Scripting.FileSystemObject")   
if Debug then wscript.echo fso.GetAbsolutePathName(wscript.arguments(0))
path=fso.GetAbsolutePathName(wscript.arguments(0))
Set fso = nothing
DriveLetter = Ucase(Left(path, 1))
path = Mid(path,3)
if Debug then  Wscript.Echo "DriveLetter " & DriveLetter & " path:" & path 'Ausgabe des ersten Zeichen  
Set WshNetwork = Wscript.CreateObject("Wscript.Network")  
Set colDrives = WshNetwork.EnumNetworkDrives

On Error Resume Next
If colDrives.Count > 0 Then
  For i = 0 To colDrives.Count - 1 Step 2
   If colDrives(i)=DriveLetter & ":" then  
     if Debug then wscript.echo colDrives(i) & " ist " & colDrives(i+1)   
     ' ....Ausgabe.................................S: ist \\serverXY\freigabeZ  
     strUncPfad=colDrives(i+1)
   End if  
  Next
End If
Set WshNetwork = Nothing
Set coldrives = Nothing
if (len( strUncPfad) = 0) then 
  strUncPfad=DriveLetter & ":"  
else
  if Debug then wscript.echo "UNC-Pfad: [" & strUncPfad &"]"  
End if 

if Debug then wscript.echo "strUncPfad + path: [" & strUncPfad & path & "]"  
'Link an Outlook übergeben   
Set ol = CreateObject ("Outlook.Application")   
Set mail = ol.CreateItem(0)
mail.body = "Dateilink: " & strUncPfad & path  
mail.Display
'--snapp c:\temp\UncPath2.vbs  

Geht bestimmt auch eleganter, aber es tut, was es soll.

Grüße
Biber
dmo
dmo 25.04.2006 um 15:10:41 Uhr
Goto Top
Hallo Biber,

das ist genau mein Lösungsansatz mit EnumNetworkDrives und den Spalten. Ich bin nun dabei Deine Idee mit dem Clipboard umzusetzen
Die erste Version mit dem erneuten Öffnen ist nicht immer der beste Weg ist.

Ich habe gelesen, dass VbScript direkt kein Clipboard unterstützt und man hier über eine ActiveX-Instanz des Internet-Explorers erst zur Seite navigieren muss.
Der Aufruf sähe dann so aus:

Set objArgs = WScript.Arguments
if (objArgs.Count=0) then MsgBox "Bitte Parameter angeben": WScript.Quit
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate("about:blank")
objIE.Document.Parentwindow.ClipboardData.SetData "Text", objArgs(0)
objIE.Quit: Set objIE = Nothing

Hier wird allerdings kein UNC behandelt. Deshalb probier ich mich an einer Lösung den Pfad, den ich per Script ja herausbekomme an eine Variable zu übergeben, deren Wert dann ans Clipboard übergeben wird. Ungefähr so: Clipboard.SetText "hier nun keinen Text sondern den Variablenwert übergeben". Wobei es bei SetText nur möglich ist, einen String zu übergeben.
Vielleicht aber auch den Pfad ins Notepad und dann in die Zwischenablage, oder kann man denn <strUncPfad + path> direkt an das Clipboard übergeben.
Was meinst Du?

Mal sehen wie es weitergeht.
Ich denke, es nimmt langsam an Eleganz zu.


Mit freundlichen Grüßen
dmo
dmo
dmo 26.04.2006 um 14:36:36 Uhr
Goto Top
Hallo!

Ich habe nun mal ein bisschen rumgetestet und versuche nun eine Lösung zu finden den Pfadstring in die 8.3 Konvention zu überführen, da z.B. nicht jeder Pfad ohne Leerzeichen auskommt.

Gruß

dmo
Biber
Biber 26.04.2006 um 15:15:28 Uhr
Goto Top
Na gut, dmo,

das sollte gehen... das FileSystemObject im VB hat meines Wissens nach auch eine "ShortName/ShortPath"-Eigenschaft - beim "File".

Also müssten halt gegen Ende noch zwei, drei Zeilen mehr rein:
....
Set fso = CreateObject("Scripting.FileSystemObject")   
Set ofile = fso.GetFile(strUncPfad & path) 

StrShortname= ofile.ShortPath  // und/oder ofile.ShortName
...

...aber dann hast Du wieder dieses kryptische Geraffel :"DOKUME~1\EIGENE~1\BLA"

Wäre es nicht einfacher, den bisherigen Ausgabestring in Anführungszeichen zu packen?

Grüße
Biber
dmo
dmo 19.06.2006 um 13:09:29 Uhr
Goto Top
Dank an Biber für die tolle Zusammenarbeit.
Biber
Biber 10.06.2008 um 14:26:38 Uhr
Goto Top
Nachtrag aus gegebenem Anlass....

Weil heute per Zufall @twi3ter in einem neuen Thread die gleiche Anforderung hatte und auch diesen Beitrag hier fand, reiche ich noch eine kleine Verbesserung nach.

Der oben gepostete Code funktioniert eigentlich, wie wir Skripter sagen.

Aber: Wenn Leerzeichen im Link sind, dann wird es nur bis zum ersten Leerzeichen als Link erkannt (Text bzw. Verzeichnis-/Dateiname kommt vollständig an, aber...).

Abhilfe: Als Mail-Format HTML benutzen, d.h. die letzten (gefühlten) 5 Zeilen so ändern:

....
'Link an Outlook übergeben  
Set ol = CreateObject ("Outlook.Application")   
Set mail = ol.CreateItem(0)
mail.HTMLBody = "<HTML><BODY><A href=""file:///" & strPath & """>" & strpath & "</A> </BODY></HTML>"  
' # hier die bisherigere Zeile  
' mail.body = "Dateilink: " & "<file:///" & strUncPfad & path &">"  
' # ende der Ersetzung im alten Code  
mail.Display
'--snapp UncPath.vbs  

Grüße Biber
twi3ter
twi3ter 10.06.2008 um 15:02:58 Uhr
Goto Top
Also hab jetzt mal dein geändertes Script mit Outlook 2003 getestet, es öffnet eine neue Mail aber ohne Inhalt?

Die Vorgängerversion ist gelaufen aber halt ohne eine direkte Verlinkung!

In Zeile 6 ist noch ein Hochkomma was dort eigentlich nicht sein sollte oder? Hab des mal entfernt geht aber trotzdem nicht ?!
Biber
Biber 10.06.2008 um 15:49:58 Uhr
Goto Top
Moin twist3er,

kann ich nicht nachvollziehen... ich habe diese Zeilen aus "meiner" auf diesemm Rechner aktiven Kontextmenü-UncPath.vbs geCopy&pastet.

Bei mir funktioniert es - es wird eine (HTML-)Mail geöffnet und der vollständige link der Datei in den Mail-Body übernommen.

Die auskommentierte Zeile ist ja nur der alte Stand ... die Zeile, die für NICHT-HTML-Mails galt.

Bei mir tut es mit XP SP2 und Outlook 2002.


BullShit.
Man/frau postet auch nicht nur 5 Zeilen einer 40 Zeilen-Datei aus Sparsamkeitsgründen.
In meiner Version hatte ich statt der Variablen StrUncpath als Variable Strpath benutzt... vergiss es.
Hier nochmal der komplette Code :
'--snipp UncPath.vbs  
Option Explicit
Dim ol, mail
Dim strUncPfad, WShNetwork, coldrives, i, strPath
Dim fso, path, DriveLetter
Dim Debug
Debug=False ' auf TRUE setzen für Meldungen  
' übergebenen Pfad vom Explorer auslesen  
Set fso = CreateObject("Scripting.FileSystemObject")   
if Debug then wscript.echo fso.GetAbsolutePathName(wscript.arguments(0))
path=fso.GetAbsolutePathName(wscript.arguments(0))
Set fso = nothing
DriveLetter = Ucase(Left(path, 1))
path = Mid(path,3)
if Debug then  Wscript.Echo "DriveLetter " & DriveLetter & " path:" & path 'Ausgabe des ersten Zeichen  
Set WshNetwork = Wscript.CreateObject("Wscript.Network")  
Set colDrives = WshNetwork.EnumNetworkDrives

On Error Resume Next
If colDrives.Count > 0 Then
  For i = 0 To colDrives.Count - 1 Step 1
   If colDrives(i)=DriveLetter & ":" then  
     if Debug then wscript.echo colDrives(i) & " ist " & colDrives(i+1)   
     strUncPfad=colDrives(i+1)
   End if  
  Next
End If
Set WshNetwork = nothing
Set coldrives = nothing
if (len( strUncPfad) = 0) then 
  strUncPfad=DriveLetter & ":"  
else
  if Debug then wscript.echo "UNC-Pfad: [" & strUncPfad &"]"  
End if 
strPath = strUncPfad & path 
if Debug then wscript.echo "strUncPfad + path: [" & strPfad & "]"  
'Link an Outlook übergeben   
Set ol = CreateObject ("Outlook.Application")   
Set mail = ol.CreateItem(0)
mail.HTMLBody = "<HTML><BODY><A href=""file:///" & strPath & """>" & strpath & "</A> </BODY></HTML>"  
mail.Display
'--snapp UncPath.vbs  
Grüße
Biber
twi3ter
twi3ter 11.06.2008 um 13:01:40 Uhr
Goto Top
Hallo,

hab den kompletten Quelltext jetzt ersetzt, die Verlinkung geht nur bis zu dem Leerzeichen!

Benutze Win XP SP2 mit Outlook 2003 SP3

Haste du eigentlich nochmal was mit dem Registry-Eintrag bezüglich des Senden an Menüs hinbekommen?

Gruß

Nils
Biber
Biber 11.06.2008 um 19:01:11 Uhr
Goto Top
Moin twi3ster,

die Verlinkung geht nur bis zu dem Leerzeichen!
Bei mir nicht, und ich verwende den geposteten Schipsel sowie OL2002 unter XP SP2

Fragen:
  • wird denn bei Dir eine HTML-Mail erzeugt oder "nur" eine Plain-Text-Mail? Denn da gibt es irgendeine OL-Voreinstellung...
  • Du bist Dir auch sicher, dass Du die jetzt gepostete Variante benutzt, d.h. wenn Du im Quellcode die Variable "Debug" auf True setzt, erscheinen bei Dir irgendwelche MsgBoxen?

Haste du eigentlich nochmal was mit dem Registry-Eintrag bezüglich des Senden an Menüs hinbekommen?

Wie - was war denn da noch offen? Ich habe doch oben unter Kommentar #3 eine .reg-Beispieldatei gepostet??

Aber okay - ohne andere Rückmeldungen kann ich auch nur behaupten, dass es bei mir funktioniert...
ist aber wirklich so....menno...

Ich habe es HEUTE/JETZT mit lokalen und Netz-Dateien mit und ohne Leerzeichen probiert, mir selbst diese Mails mit Dateilink gemailt und ALLE Dateien (bzw. Links) per Doppelklick öffnen können. Keine Auffälligkeiten.
Mehr kann ich im Moment nicht sinnvoll testen.

Sorry
Biber
[Edit 12.6.2008] BTW - eigentlich sollte das auch egal sein, ob der Link ganz unterstrichen dargestellt wird bzw. was in dem angezeigten Feld als "Dateiname" drinsteht. Der Link selbst steht ja nach dem Wort "file://" in der Variablen strpath.
Und dort, wo in dieser Zeile das zweite Mal strpath als "Anzeigetext" steht, da kannst Du auch "MfG" oder "Hier ist die Datei" reinschreiben.
[Edit]
napperman
napperman 16.06.2008 um 11:47:49 Uhr
Goto Top
Wenn man das jetzt noch hinkriegen könnte, dass das Script bei mehreren markierten Dateien nicht für jede eine neue Mail erstellt, sondern alle Links in eine Mail packt wäre es perfekt...
napperman
napperman 20.06.2008 um 13:04:47 Uhr
Goto Top
Klasse Sache dieses Script.
Ich habe es noch an einer Stelle etwas überarbeitet, damit die in Outlook verwendete Signatur gleich mit angehängt wird:
'--snipp UncPath.vbs   
Option Explicit 
Dim ol, mail 
Dim strUncPfad, WShNetwork, coldrives, i, strPath 
Dim fso, path, DriveLetter 
Dim Debug 
Debug=False ' auf TRUE setzen für Meldungen   
' übergebenen Pfad vom Explorer auslesen   
Set fso = CreateObject("Scripting.FileSystemObject")    
if Debug then wscript.echo fso.GetAbsolutePathName(wscript.arguments(0)) 
path=fso.GetAbsolutePathName(wscript.arguments(0)) 
Set fso = nothing 
DriveLetter = Ucase(Left(path, 1)) 
path = Mid(path,3) 
if Debug then  Wscript.Echo "DriveLetter " & DriveLetter & " path:" & path 'Ausgabe des ersten Zeichen   
Set WshNetwork = Wscript.CreateObject("Wscript.Network")   
Set colDrives = WshNetwork.EnumNetworkDrives 
On Error Resume Next 
If colDrives.Count > 0 Then 
  For i = 0 To colDrives.Count - 1 Step 1 
   If colDrives(i)=DriveLetter & ":" then   
    if Debug then wscript.echo colDrives(i) & " ist " & colDrives(i+1)    
     strUncPfad=colDrives(i+1) 
   End if   
  Next 
End If 
Set WshNetwork = nothing 
Set coldrives = nothing 
if (len( strUncPfad) = 0) then  
  strUncPfad=DriveLetter & ":"   
else 
  if Debug then wscript.echo "UNC-Pfad: [" & strUncPfad &"]"   
End if  
strPath = strUncPfad & path  
if Debug then wscript.echo "strUncPfad + path: [" & strPfad & "]"   
'Link an Outlook übergeben    
Set ol = CreateObject ("Outlook.Application")    
Set mail = ol.CreateItem(0)
mail.Display
with mail
.HTMLBody = "<HTML><BODY><A href=""file:///" & strPath & """>" & strpath & "</A> </BODY></HTML>" & mail.HTMLBody  
End with
'--snapp UncPath.vbs  


Und dieses erweiterte Registry File erweitert die Möglichkeit auch auf Ordner:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\Shell\Link an Outlook reichen]
[HKEY_CLASSES_ROOT\*\Shell\Link an Outlook reichen\command]
@="wscript c:\\Path.vbs \"%1\""

[HKEY_CLASSES_ROOT\Folder\Shell\Link an Outlook reichen]
[HKEY_CLASSES_ROOT\Folder\Shell\Link an Outlook reichen\command]
@="wscript c:\\Path.vbs \"%1\""

Die Bezeichnungen habe ich natürlich nach meinen Wünschen angepasst.

Nochmal Danke für die Ausarbeitung!!!!!!!!!!!!!!!!!!!!
Biber
Biber 20.06.2008 um 13:55:14 Uhr
Goto Top
Moin napperman,

danke auch an Dich.
Die Erweiterung auf Folder ist auch sinnvoll - werde ich auch bei mir einbauen.

Und wenn die EM mal vorbei ist und wir alle wieder vieeeeeeeeeel Zeit haben, dann schau ich mir vielleicht noch mal diese Variante mit "mehrere Dateien anklicken und in einer Mail aufführen" an. [Falls bastla nicht schneller ist...]

@all
Die ganzen Zeilen mit "if Debug then ..." brauchen natürlich in dem "produktiven" Skript nicht mit dabei sein. Die waren nur zum Nachvollziehen und Testen während de gemeinsamen Lösungsfindung hier im Forum gedacht.

Grüße
Biber

P.S. ich habe den vbs-Schnipsel in Deinem Kommentar mal in -Tags gesetzt.
toexelchen
toexelchen 07.07.2011 um 13:55:29 Uhr
Goto Top
Sorry, dass ich den alten Thread hier nochmal auspacke, aber ich habe versucht die Lösung bei mir zu nutzen, wenn ich nun aber versuche den Link zu übernehmen erhalte ich folgende Fehlermeldung:

"Für diesen Vorgang ist keine Anwendung der angegebenen Datei zugeordnet. Erstellen sie eine Zuordnung, indem Sie unter "Systemsteuerung" auf "Ordneroptionen" klicken"

Hat jemand ne Ahnung, wie ich das Problem beheben kann?