DRAG N DROP PLUS

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 29 août 2005 à 08:42
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 30 août 2005 à 13:47
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/33502-drag-n-drop-plus

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
30 août 2005 à 13:47
Elles datent du shell32.dll V5 apparu avec Win2000 fin 1999.
marc_pl Messages postés 10 Date d'inscription dimanche 11 avril 2004 Statut Membre Dernière intervention 13 septembre 2009
30 août 2005 à 13:40
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.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 août 2005 à 23:11
marc_pl Messages postés 10 Date d'inscription dimanche 11 avril 2004 Statut Membre Dernière intervention 13 septembre 2009
29 août 2005 à 22:51
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)
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 août 2005 à 08:42
Salut,

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