Accueil > > > RÉCUPÉRATION/ÉCRITURE DES NOMS DE FICHIERS CONTENUS DANS LE PRESSE-PAPIER
RÉCUPÉRATION/ÉCRITURE DES NOMS DE FICHIERS CONTENUS DANS LE PRESSE-PAPIER
Information sur la source
Description
VB permet de lire facilement certains contenus du presse-papier windows (texte, image ...), mais pour ce qui est des noms de fichier, c'est une autre histoire. (par exemple, lors d'un copier-coller de fichiers dans l'explorateur windows) J'ai donc fouillé un peu partout et j'ai trouvé ces bouts de code que j'ai un peu dépoussiéré. Comme je pense que cela peut être utile à d'autres, et que je n'ai rien trouvé de similaire ici, voici le code :
Source
- Option Explicit
-
- Private Declare Function OpenClipboard Lib "user32" (ByVal hWnd As Long) As Long
- Private Declare Function CloseClipboard Lib "user32" () As Long
- Private Declare Function GetClipboardData Lib "user32" (ByVal wFormat As Long) As Long
- Private Declare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As Long) As Long
- Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags&, ByVal dwBytes As Long) As Long
- Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
- Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
- Private Declare Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
- Private Declare Function DragQueryFile Lib "shell32.dll" Alias "DragQueryFileA" (ByVal hDrop As Long, ByVal iFile As Long, ByVal lpszFile As String, ByVal cch As Long) As Long
-
- Private Const GMEM_MOVEABLE = &H2
- Private Const GMEM_ZEROINIT = &H40
- Private Const GHND = (GMEM_MOVEABLE Or GMEM_ZEROINIT)
- Private Const CF_HDROP As Long = 15
-
- Private Type POINTAPI
- x As Long
- y As Long
- End Type
-
- Private Type DROPFILES
- pFiles As Long
- pt As POINTAPI
- fNC As Long
- fWide As Long
- End Type
-
- Public Function ClipboardGetFiles(file_names() As String) As Boolean
- Dim drop_handle As Long
- Dim num_file_names As Long
- 'Dim file_names() As String
- Dim file_name As String * 1024
- Dim i As Long
- If Clipboard.GetFormat(vbCFFiles) Then
- If OpenClipboard(0) Then
- drop_handle = GetClipboardData(CF_HDROP)
- If drop_handle = 0 Then
- ClipboardGetFiles = False
- CloseClipboard
- Exit Function
- End If
- ' nombre de noms de fichier dans le presse-papier
- num_file_names = DragQueryFile(drop_handle, -1, _
- vbNullString, 0)
- ' récupération des noms de fichier
- ReDim file_names(1 To num_file_names) As String
- For i = 1 To num_file_names
- DragQueryFile drop_handle, i - 1, _
- file_name, Len(file_name)
- ' On coupe au niveau du caractère null
- file_names(i) = Left$(file_name, InStr(file_name, vbNullChar) - 1)
- Next
- ' fermeture du presse-papier (important)
- CloseClipboard
- ClipboardGetFiles = True
- End If
- Else
- ClipboardGetFiles = False
- End If
- End Function
-
- ' copie des noms de fichiers dans le presse-papier
- ' retourne vrai en cas de réussite
- Public Function ClipboardSetFiles(file_names() As String) As Boolean
- Dim file_string As String
- Dim drop_files As DROPFILES
- Dim memory_handle As Long
- Dim memory_pointer As Long
- Dim i As Long
- ' on vide le presse-papier
- Clipboard.Clear
- If OpenClipboard(0) Then
- ' construit une liste de noms de fichier terminés par null
- For i = LBound(file_names) To UBound(file_names)
- file_string = file_string & file_names(i) & vbNullChar
- Next i
- file_string = file_string & vbNullChar
- ' Initialise la structure DROPFILES
- drop_files.pFiles = Len(drop_files)
- drop_files.fWide = 0 ' ANSI characters.
- drop_files.fNC = 0 ' Client coordinates.
-
- ' réservation mémoire pour DROPFILES et la liste des noms de fichier
- memory_handle = GlobalAlloc(GHND, Len(drop_files) + Len(file_string))
- If memory_handle Then
- memory_pointer = GlobalLock(memory_handle)
-
- ' copie en mémoire de la strucure et des noms de fichier
- CopyMem ByVal memory_pointer, drop_files, Len(drop_files)
- CopyMem ByVal memory_pointer + Len(drop_files), ByVal file_string, Len(file_string)
- GlobalUnlock memory_handle
-
- ' copie des données vers le presse-papier
- SetClipboardData CF_HDROP, memory_handle
- ClipboardSetFiles = True
- Else
- ClipboardSetFiles = False
- End If
- CloseClipboard
- Else
- ClipboardSetFiles = False
- End If
- End Function
Option Explicit
Private Declare Function OpenClipboard Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function GetClipboardData Lib "user32" (ByVal wFormat As Long) As Long
Private Declare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As Long) As Long
Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags&, ByVal dwBytes As Long) As Long
Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function DragQueryFile Lib "shell32.dll" Alias "DragQueryFileA" (ByVal hDrop As Long, ByVal iFile As Long, ByVal lpszFile As String, ByVal cch As Long) As Long
Private Const GMEM_MOVEABLE = &H2
Private Const GMEM_ZEROINIT = &H40
Private Const GHND = (GMEM_MOVEABLE Or GMEM_ZEROINIT)
Private Const CF_HDROP As Long = 15
Private Type POINTAPI
x As Long
y As Long
End Type
Private Type DROPFILES
pFiles As Long
pt As POINTAPI
fNC As Long
fWide As Long
End Type
Public Function ClipboardGetFiles(file_names() As String) As Boolean
Dim drop_handle As Long
Dim num_file_names As Long
'Dim file_names() As String
Dim file_name As String * 1024
Dim i As Long
If Clipboard.GetFormat(vbCFFiles) Then
If OpenClipboard(0) Then
drop_handle = GetClipboardData(CF_HDROP)
If drop_handle = 0 Then
ClipboardGetFiles = False
CloseClipboard
Exit Function
End If
' nombre de noms de fichier dans le presse-papier
num_file_names = DragQueryFile(drop_handle, -1, _
vbNullString, 0)
' récupération des noms de fichier
ReDim file_names(1 To num_file_names) As String
For i = 1 To num_file_names
DragQueryFile drop_handle, i - 1, _
file_name, Len(file_name)
' On coupe au niveau du caractère null
file_names(i) = Left$(file_name, InStr(file_name, vbNullChar) - 1)
Next
' fermeture du presse-papier (important)
CloseClipboard
ClipboardGetFiles = True
End If
Else
ClipboardGetFiles = False
End If
End Function
' copie des noms de fichiers dans le presse-papier
' retourne vrai en cas de réussite
Public Function ClipboardSetFiles(file_names() As String) As Boolean
Dim file_string As String
Dim drop_files As DROPFILES
Dim memory_handle As Long
Dim memory_pointer As Long
Dim i As Long
' on vide le presse-papier
Clipboard.Clear
If OpenClipboard(0) Then
' construit une liste de noms de fichier terminés par null
For i = LBound(file_names) To UBound(file_names)
file_string = file_string & file_names(i) & vbNullChar
Next i
file_string = file_string & vbNullChar
' Initialise la structure DROPFILES
drop_files.pFiles = Len(drop_files)
drop_files.fWide = 0 ' ANSI characters.
drop_files.fNC = 0 ' Client coordinates.
' réservation mémoire pour DROPFILES et la liste des noms de fichier
memory_handle = GlobalAlloc(GHND, Len(drop_files) + Len(file_string))
If memory_handle Then
memory_pointer = GlobalLock(memory_handle)
' copie en mémoire de la strucure et des noms de fichier
CopyMem ByVal memory_pointer, drop_files, Len(drop_files)
CopyMem ByVal memory_pointer + Len(drop_files), ByVal file_string, Len(file_string)
GlobalUnlock memory_handle
' copie des données vers le presse-papier
SetClipboardData CF_HDROP, memory_handle
ClipboardSetFiles = True
Else
ClipboardSetFiles = False
End If
CloseClipboard
Else
ClipboardSetFiles = False
End If
End Function
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Pb - Lister les fichiers avec FileSystemObject [ par kamui74 ]
Bonjour ! J'ai un petit soucis je cherche à lister les fichiers d'un répertoire et faire un traitement dessus, mais le problème est que
Get opened files [ par gouidos ]
salut, je me demandais si il était possible de recupérer la liste des nom s des fichiers qui sont ouverts a un moment donnée par le systeme. Je voudra
get opened files [ par gouidos ]
salut, je me demandais si il était possible de recupérer la liste des nom s des fichiers qui sont ouverts a un moment donnée par le systeme. Je voudra
txt files [ par sly63 ]
Bonjour,J'ai developpe quelques applications en VB6, chacune d'entre elles lit ligne par ligne des fichiers de type *.txt.J'ai cependant rencontre que
Filtré un listage de fichier [ par lunnorey ]
Bonjour, Je souhaiterai listé des fichiers dans un dossier. Mais des fichiers avec un certaine extension (.jpg). J'ai commencé mais je but : [code=vb
Rechercher des fichiers commençant par le même nom [ par erwan421 ]
Bonjour tout le monde [^^happy8] Je tente actuellement de coder un programme en VB.net dans lequel on pourra gérer des notes/tâches. Mon problème est
CHARGER PLUSIEURS FICHIERS DANS UN SEUL RICHTEXTBOX [ par winvsmac ]
Bonjour, Je me permets de déposer cette question sur le forum car je n'ai pas trouvé de solution. Pourtant, ma question est 'bête' mais je séche : c
Pouvoir ouvrir des fichiers excel avec vba sans le faire planter [ par perpitou ]
Bonjour à tous, J'ai des userforms sur lesquels se trouvent des boutons accès à un répertoire par exemple : [code=vb]Private Sub CommandButton1_Clic
VB & fichiers .bat [ par doudinho06 ]
Bonjour, Je veux lancer un exe VB à partir d'un fichier .bat, le soucis c'est que l'exe VB a besoin d'un paramettre d'entrée alors que moi je veux l'e
MCISendString et Windows 7 - Fichiers MP4 [ par ooly2001 ]
Salut la communauté ! J'ai développé une appli qui fonctionne très bien sur Windows XP (sp2 et sp3). Cette appli. me permet de lire des fichiers vidé
|
Derniers Blogs
[WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|