vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Datei (-Liste) in die Zwischenablage kopieren 
Autor: ThomasA
Datum: 15.03.05 13:47

Hallo Allerseits

Problem:
Ich möchte aus einer Liste im VB-Projekt eine Datei in die Zwischenablage kopieren um sie dann ggf. im Explorer einfügen zu können.

Lösung war:
Es ist wie verhext, da habe ich einen passenden Tipp (CD: VB-Archiv 3) gefunden und dann funktioniert er eigentlich nicht so richtig. Denn die Datei wird zwar erst kopiert, aber nach dem Einfügen in den Explorer wird sie an der Orginalstelle gelöscht, also nicht wie kopieren, sondern wie ausschneiden!

Übrigens ich habe den Code, galt für die Auswahl mehrerer Dateien aus einer Liste für nur eine Datei kopieren abgeändert.

Hier jetzt der Code:

============= Modul =============
'Benötigte API's zum Kopieren einer Datei oder mehrerer in die Zwischenablage
Public Declare Function OpenClipboard Lib "user32" _
(ByVal hwnd As Long) As Long
Public Declare Function EmptyClipboard Lib "user32" () As Long
Public Declare Function SetClipboardData Lib "user32" _
(ByVal wFormat As Long, ByVal hMem As Long) As Long
Public Declare Function CloseClipboard Lib "user32" () As Long

'Zeiger auf die Dateiliste im Speicher
Public Declare Function GlobalAlloc Lib "kernel32" _
(ByVal wFlags As Long, ByVal dwBytes As Long) As Long
Public Declare Function GlobalFree Lib "kernel32" _
(ByVal hMem As Long) As Long
Public Declare Function GlobalLock Lib "kernel32" _
(ByVal hMem As Long) As Long
Public Declare Function GlobalUnlock Lib "kernel32" _
(ByVal hMem As Long) As Long
Public Declare Sub CopyMem Lib "kernel32" Alias _
"RtlMoveMemory" (Destination As Any, Source As Any, _
ByVal Length As Long)

Public Type POINTAPI
x As Long
y As Long
End Type

Public Type DROPFILES
pFiles As Long
pt As POINTAPI
fNC As Long
fWide As Long
End Type

'Konstanten
Public Const GMEM_MOVEABLE = &H2
Public Const GMEM_ZEROINIT = &H40
Public Const CF_HDROP = &HF
==================================

============= Form ===============
Private Sub Menü_Kopieren_Click()

'Der Dateipfad, bei mir aus einem ListView => siehe den tollen Tipp aus: www.vb-fun.de / Tipp 0326
DateiPfad = PfadProgramm & TreeViewEintrag & "\" & ListView1.SelectedItem

'*******

Dim sFiles As String
Dim pTmp As Long
Dim hTmp As Long
Dim sPath As String
Dim DROPFILES As DROPFILES

'Dateipfad erstellen (doppelt-Null-terminiert)
sFiles = DateiPfad & vbNullChar & vbNullChar

'Clipboard öffnen
If OpenClipboard(0&) Then

'Inhalt der Zwischenablage löschen
EmptyClipboard

'Zeiger auf Dateiliste erstellen und im Speicher ablegen
hTmp = GlobalAlloc((GMEM_MOVEABLE Or GMEM_ZEROINIT), _
Len(DROPFILES) + Len(sFiles))

If hTmp Then
pTmp = GlobalLock(hTmp)

DROPFILES.pFiles = Len(DROPFILES)
Call CopyMem(ByVal pTmp, DROPFILES, Len(DROPFILES))
Call CopyMem(ByVal (pTmp + Len(DROPFILES)), ByVal sFiles, Len(sFiles))
Call GlobalUnlock(hTmp)

'In die Zwischenablage
If SetClipboardData(CF_HDROP, hTmp) Then
Else
MsgBox "Fehler beim Kopieren in die Zwischenablage!", vbCritical, App.ProductName
End If

End If

'Clipboard schliessen
Call CloseClipboard

End If

End Sub
==================================

So, und nun wie immer die große Frage, wo liegt der Fehler? Ich habe schon einige Stunden damit verbracht, aber, naja.

Gruß - Thomas.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Datei (-Liste) in die Zwischenablage kopieren853ThomasA15.03.05 13:47

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel