begin process at 2012 02 13 01:04:57
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Système

 > 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

Note :
Aucune note
Catégorie :Système Classé sous :presse-papier, clipboard, files, fichiers Niveau :Expert Date de création :01/04/2008 Vu / téléchargé :4 297 / 203

Auteur : oommeeggaa3d

Ecrire un message privé
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
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


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture MÉNAGER SON CPU, SON DÉGAGEMENT THERMIQUE, ET SA FACTURE D'E...

 Sources de la même categorie

Source avec Zip Source avec une capture AUTORISER/REFUSER L'EXECUTION DE PROCESSUS par pierreh51
Source avec Zip Source .NET (Dotnet) CLONE/FORK DES FLUX DE LA CONSOLE : PERMETTRE LA REDIRECTION... par ShareVB
Source avec Zip Source .NET (Dotnet) DÉFRAGMENTER UN FICHIER par ShareVB
Source avec Zip Source .NET (Dotnet) ECRAN DE VEILLE : DÉTECTER LE LANCEMENT/DÉCLENCHER/EMPÊCHER par ShareVB
Source avec Zip Source avec une capture DESACTIVER / ACTIVER LES MISES EN VEILLES PC par Arsena

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture RECHERCHE & SAUVEGARDE DES FICHIERS PAR LEURS EXTENSIONS par hackoo
Source avec Zip Source avec une capture FILE2COMPARE: COMPARAISON DE DEUX FICHIERS LIGNE PAR LIGNE par hackoo
Source avec Zip SUIVI SCORES ET CLASSEMENTS SCRABBLE par mimiZanzan
Source avec Zip Source avec une capture Source .NET (Dotnet) CLIPBOARD_VB.NET par Le Pivert
Source avec Zip Source avec une capture RENOMMEUR DE FICHIERS par Schlangan

Commentaires et avis

Commentaire de Renfield le 01/04/2008 12:17:31 administrateur CS

L'idée est bonne, attention a pas trop calquer sur le C:


For i = LBound(file_names) To UBound(file_names)
    file_string = file_string & file_names(i) & vbNullChar
  Next i
  file_string = file_string & vbNullChar

se code :

file_string = join(file_names, vbnullchar) & vbnullchar


Else
  ClipboardSetFiles = False

et

  drop_files.fWide = 0    ' ANSI characters.
  drop_files.fNC = 0      ' Client coordinates.

sont inutiles en VB6 (valeurs par defaut)

Commentaire de oommeeggaa3d le 01/04/2008 12:22:47

Merci, je ne connaissais pas "join".

Commentaire de BruNews le 01/04/2008 21:16:04 administrateur CS

If Clipboard.GetFormat(vbCFFiles) Then
  If OpenClipboard(0) Then
  .....

Pas très productif tout ça.
Clipboard.GetFormat(vbCFFiles)
C'est déjà:
OpenClipboard(0)
IsClipboardFormatAvailable(CF_HDROP)
CloseClipboard()

Commentaire de Renfield le 02/04/2008 09:15:54 administrateur CS

certes, ce mix instructions VB / API n'est pas très heureux...

passes en tout APIs, pour le coup

Commentaire de Fixnyl le 09/04/2008 13:23:25

Attention tout de même car si on fait une copie de fichiers ils sont déplacés.
Plus d'explication : Allez dans l'explorateur copier une séries de fichiers utiliser se bout de code dans VB :

Dim Tfiles() As String

If ClipboardGetFiles(Tfiles()) = True Then

For i = 1 To UBound(Tfiles)
    nfiles = nfiles & Tfiles(i) & vbCrLf
Next

MsgBox nfiles

ClipboardSetFiles Tfiles()

End If

Puis utiliser la fonction Coller dans l'explorateur, à ce moment là les fichiers sont déplacer.

Commentaire de Renfield le 09/04/2008 16:42:54 administrateur CS

pas de lien entre ces deux actions....

 Ajouter un commentaire


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é


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,123 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales