DevTrain Startseite Advanced Developers Conference vom 14.-15. Februar 2011  
  
  
SUCHEN:  
ARTIKEL ONLINE: 525   

Kategorien
.NET
Datenbanken
Web
XML

Allgemein
Camp
Foren
Events
Persönliche Einstellungen
Registrieren
Prämien Shop
Kontakt
Impressum
Über DevTrain

Autoren


   Autor: Till Groos Artikel Drucken
        
Pfad einer Datei in Zwischenablage kopieren

Entwickler ticken anders. Mein Tick sind Tools für jeden Zweck. Der letzte Anlass war mal wieder das Referenzieren einer Datei als Hintergrundbild für ein Label. Um den absoluten Pfad für eine Datei in der Zwischenablage zu haben, sind einige Schritte (rechtsklick, umbenennen, kopieren, einfügen, backslash hinzufügen, wieder kopieren) nötig und das nervt auf dauer. Das muss einfacher gehen...

Im Kontextmenü im Explorer gibt es Programme, die Funktionen mit aktuell ausgewählten Dateien anstellen. Das wäre doch ganz nett. Wie bekommt man einen Eintrag ins Kontextmenü? Registry! Unter HKEY_CLASSES_ROOT\*\shell kann man Einträge hinzufügen. Dazu einfach einen neuen Schlüssel hinzufügen, als Wert für (Standard) den Eintrag für das Kontextmenü und als Unterschlüssel "command" den Pfad zum auszuführenden Programm. Da als Typ für die Werte "Reg_Expand_SZ" benutzt werden muss, bietet sich eine .reg-Datei zum Einfügen der Daten in die Registry an:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\clipboard]
@="Copy path to clipboard"

[HKEY_CLASSES_ROOT\*\shell\clipboard\command]
@=hex(2):22,00,43,00,3a,00,5c,00,44,00,6f,00,6b,00,75,00,6d,00,65,00,6e,00,74,\
  00,65,00,20,00,75,00,6e,00,64,00,20,00,45,00,69,00,6e,00,73,00,74,00,65,00,\
  6c,00,6c,00,75,00,6e,00,67,00,65,00,6e,00,5c,00,74,00,67,00,31,00,5c,00,45,\
  00,69,00,67,00,65,00,6e,00,65,00,20,00,44,00,61,00,74,00,65,00,69,00,65,00,\
  6e,00,5c,00,56,00,69,00,73,00,75,00,61,00,6c,00,20,00,53,00,74,00,75,00,64,\
  00,69,00,6f,00,20,00,50,00,72,00,6f,00,6a,00,65,00,63,00,74,00,73,00,5c,00,\
  43,00,6c,00,69,00,70,00,62,00,6f,00,61,00,72,00,64,00,43,00,6f,00,70,00,79,\
  00,5c,00,62,00,69,00,6e,00,5c,00,63,00,6c,00,69,00,70,00,62,00,6f,00,61,00,\
  72,00,64,00,63,00,6f,00,70,00,79,00,22,00,20,00,22,00,25,00,31,00,22,00,00,\
  00

Ein kleiner Kniff ist noch nötig. Die Funktion Environment.GetCommandLineArgs() gibt Pfade im 8.3 Format zurück. Da .NET keine Funktion zum Umwandeln bietet ist die API gefragt:

Private Declare Function GetLongPathName Lib "kernel32" Alias _
    "GetLongPathNameA" (ByVal lpszShortPath As String, _
    ByVal lpszLongPath As String, ByVal cchBuffer As Long) _
    As Long

Dann fehlt nur noch der Code für das kopieren in die Zwischenablage:
Public Shared Sub Main(ByVal args() As String)
    Dim s() As String
    Dim _longfilename As String
    s = Environment.GetCommandLineArgs()
    If s.Length > 1 Then
        Try
            _longfilename = GetLongFileName(s(1))
            Clipboard.SetDataObject(_longfilename, True)
            Dim info() As String = {"copied to clipboard:", _longfilename}
            Application.Run(New frmInfo(info))
        Catch ex As Exception
            Dim info() As String = {"Error:", ex.ToString}
            Application.Run(New frmInfo(info))
        End Try
    End If
    Application.Exit()
End Sub
Public Shared Function GetLongFileName(ByVal FullPath As String) As String
    Dim lLen As Long
    Dim sBuffer As New String("", MAX_PATH)
    lLen = GetLongPathName(FullPath, sBuffer, Len(sBuffer))
    If lLen > 0 And Err.Number = 0 Then
        Return sBuffer.Trim()
    End If
End Function

Ein MSI-Paket steht unter http://www.ppedv.de/dwnld/clipboard_setup.msi zur Verfügung.


DevTrain Camp - Schneller zum .NET 3.5 Developer
 
Verwandte Artikel      Verlinkte Dokumente
    Keine verknüpften Dokumente
    Keine Links vorhanden

  Erfasst am: 20.08.2004
  Gültig bis: 18.11.2004
6 Ratings
Bewertung: 73,3%
schlecht    sehr gut  

 
© Copyright 2007 ppedv AG