begin process at 2012 05 27 15:51:44
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichiers / Disque

 > DRAG N DROP PLUS

DRAG N DROP PLUS


 Information sur la source

Note :
Aucune note
Catégorie :Fichiers / Disque Classé sous :drag, drop, copie Niveau :Initié Date de création :28/08/2005 Vu / téléchargé :8 464 / 538

Auteur : marc_pl

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

 Description

Cliquez pour voir la capture en taille normale
Ce programme effectue une copie de fichiers à l'aide d'un glisser-déposer (drag and drop).
Le principe est simple:
Le programme se compose de deux zones de listes, vous glissez les fichiers à copier dans la première, ensuite vous glissez les fichiers de la liste vers un dossier de destination et enfin la copie se fait en affichant la progression dans la deuxième zone de liste.

Le drag and drop est effectué avec la technologie OLE, le chemin de destination est retrouvé grâce à des fonctions non documentées et avec un hook WM_GETMESSAGE.


 Conclusion

J'ai fait cet exemple pour maitriser le drag and drop et mettre au point la méthode pour retrouver le chemin de destination. J'utiliserai cet exemple pour mon application SilverScan (Logiciel de recherche de fichiers sur un réseau), allez sur mon site si vous voulez suivre son développement (www.thebestof.tk ou marcplouhinec.free.fr section PROJETS/REALISATIONS).

 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 de la même categorie

COMPTER LE NOMBRE DE PAGES D'UN FICHIER PDF par Renfield
Source avec Zip Source avec une capture GENERE BMP par lajouad
Source avec Zip Source avec une capture GETIONNAIRE D'UNE BIBLIOTHÉQUE EN C par benzarabel
FONCTION D'ÉDITION DE FICHIER BIT À BIT [C-MULTIPLATEFORME] par lynxtyle
Source avec Zip Source avec une capture UN GESTIONNAIRE DU FICHIER par benzarabel

 Sources en rapport avec celle ci

Source avec Zip COPIE DE FICHIERS PAR RESEAU LOCAL par cczerty
COPIE AVEC SHFILEOPERATION par steph12358
Source avec Zip MFC - DESSINER SOUS VC++ AVEC SELECTION par randriano
Source avec Zip Source avec une capture [WIN32][C][DEV-C++] SPLITALL GESTIONNAIRE DE DÉCOUPAGE / REC... par omnia
Source avec Zip Source avec une capture DRAG & DROP ENTRE 2 CLISTCTRL ( BIBLIOTHEQUE OLE ) par gabule

Commentaires et avis

Commentaire de BruNews le 29/08/2005 08:42:59 administrateur CS

Salut,

peux-tu indiquer quelles sont les fonctions non documentées que tu emploies ?

Commentaire de marc_pl le 29/08/2005 22:51:20

Salut,
Voici ma fonction utilisant les fonctions non-documentées:

char *ShellGetPath()
{
POINT pt;
GetCursorPos(&pt);
HWND hwndListView = WindowFromPoint(pt);
char nom[255];
GetWindowText(hwndListView,nom,255);

if(strcmp(nom,"FolderView") != 0)
{
return NULL;
}

//On est dans l'explorateur, dans la liste des fichiers
//On regarde si on n'est pas sur un dossier
char DossierSelectionne[255];
ZeroMemory(DossierSelectionne,255);

if(ListView_GetHotItem(hwndListView) != -1)
{
//On est sur un fichier
OpenClipboard(NULL);
EmptyClipboard();
CloseClipboard();

HookGetItemText();//Le hook envoie les données dans le presse papier

HANDLE hgbl = NULL;

//On attend que les données arrivent dans le presse papier
while(IsClipboardFormatAvailable(CF_TEXT) == NULL);

OpenClipboard(NULL);

hgbl = GetClipboardData(CF_TEXT);

char *string = (char*)GlobalLock(hgbl);
strcpy(DossierSelectionne,string);

EmptyClipboard();
CloseClipboard();

UnHook();
}


char *Chemin = new char[1000];

HWND hWnd = hwndListView;
while(GetParent(hWnd)!=0)
hWnd = GetParent(hWnd);


GetWindowText(hWnd,nom,255);

if(strcmp(nom,"Program Manager") == 0)
{
//On est dans le bureau
strcpy(Chemin,getenv("USERPROFILE"));
if(strcmp(DossierSelectionne,"Mes documents") != 0)
strcat(Chemin,"\\Bureau");
}
else
{

HINSTANCE hShell32;
FARPROC SHFreeShared2;
FARPROC SHLockShared2;
FARPROC SHUnlockShared2;
FARPROC ILClone2;


hShell32 = LoadLibrary("shell32.dll");
SHFreeShared2 = GetProcAddress(hShell32, "SHFreeShared");
SHLockShared2 = GetProcAddress(hShell32, "SHLockShared");
SHUnlockShared2 = GetProcAddress(hShell32, "SHUnlockShared");
ILClone2 = GetProcAddress(hShell32, "ILClone");



LPITEMIDLIST result = NULL;

DWORD pid = GetCurrentProcessId();
HANDLE hMem = (HANDLE)SendMessage(hWnd, CWM_GETPATH, pid, 0);
if (hMem)
{
LPVOID pv = ((LPVOID (WINAPI *)(HANDLE, DWORD))SHLockShared2)((void **)hMem, pid);


if (pv)
{
result = ((LPITEMIDLIST ( WINAPI*)(LPCITEMIDLIST))ILClone2)((LPCITEMIDLIST)pv);
((BOOL (WINAPI *)(LPVOID))SHUnlockShared2)(pv);
}
((BOOL (WINAPI *)(HANDLE, DWORD))SHFreeShared2)(hMem, pid);
}


SHGetPathFromIDList(result,Chemin);

FreeLibrary(hShell32);
}
if(DossierSelectionne[0]!=0)
{
//On teste si c'est bien un dossier ou si c'est un fichier
char temp[1000];
strcpy(temp,Chemin);
strcat(temp,"\\");
strcat(temp,DossierSelectionne);

FILE *stream;
stream = fopen(temp,"r");
if(stream == NULL)
{
//C'est un dossier
strcat(Chemin,"\\");
strcat(Chemin,DossierSelectionne);
}
else
{
//C'est un fichier
fclose(stream);
}
}

return Chemin;
}


Les fonctions sont:
SHFreeShared
SHLockShared
SHUnlockShared
ILClone

A cela il faut ajouter la définition:
#define CWM_GETPATH (WM_USER+12)

Commentaire de BruNews le 29/08/2005 23:11:17 administrateur CS

Regarde ici, ellse sont comme les autres dans MSDN:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/functions.asp

Commentaire de marc_pl le 30/08/2005 13:40:03

En fait c'est comme ça qu'on les appelle quand je les ai trouvées sur internet, elles ne sont ni dans shell32.lib ni dans la doc msdn sur CD (elle date de visual c++ 6). Peut-être que microsoft les a rajouté après.

Commentaire de BruNews le 30/08/2005 13:47:50 administrateur CS

Elles datent du shell32.dll V5 apparu avec Win2000 fin 1999.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Drag and drop sur une CListctrl [ par Xavixxxx ] Bonjour !!!Je suis en train de programmer un agenda dynamique sous Visual C++ avec une CListctrl,et j'ai un gros problème.J'aimerai pouvoir déplacer t question drag drop [ par youpla51 ] Bonjour,Lorsque je fait un drag drop dans un cRichEditCtrl je recoit un message EN_DROPFILES dans lequel je ne peux recupérer que le nom du fichier.Or Drag Drop [ par said01 ] Bonjour,Au momoent d'un drag&amp;Drop depuis l'explorateur windows vers ma treeview, je souhaite&nbsp;d&#233;t&#233;ctcter le pr&#233;sence de la sour drag&drop sur l'executable [ par crazyh0rse ] je voudrais faire un drag&amp;drop sur l'icone de l'executable et recuper&#233; le nom des fichier drop&#233;.j'arrive a g&#233;r&#233; le drag&amp;dr Hook drag and drop [ par kakai ] J&#8217;ai un grand besoin d&#8217;aide. <P class=MsoNormal style Drag and Drop [ par marc_pl ] Bonjour, je suis en train d'&#233;crire un programme qui recherche des fichiers sur un r&#233;seau. Il se compose d'une boite de dialogue contenant 2 MFC: Drag and Drop d'objet [ par Breizhim ] Bonjour!Le drag and drop de fichier est expliqu&#233; et re-expliqu&#233; sur le net.Mais mon besoin est diff&#233;rent, sachant que l'utilisation des Drag & drop sur exe [ par Galmiza ] Salut tout le monde !J'ai un problème avec les arguments passé à un exe suite à un drag and drop.Lorsque le nombre de fichiers glissés vers l'exe est Drag&Drop [ par yoyo269 ] Bonjour à tous,je souhaiterai effectuer un drag&amp;drop sur une edit.J'arrive parfaitement bien à utiliser le drag&amp;drop sur une fenêtre entière.C drag'n drop picture [ par blinix123 ] Bonjour,Voila d'un coté j'ai une imagelist, qui contient des miniatures, et de l'autres j'ai des pictures vides, et donc j'aimerais réalisé un glisser


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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,014 sec (3)

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