Bonsoir,

J'essaye de faire un petit utilitaire dont le seul but, c'est de recuperer les noms de fichiers (par paquets) qu'on drop sur sa fenetre (a partir de l'explorateur par exemple), puis de lancer un autre utilitaire avec ces fichiers en parametre (ligne de commande), un par un.

Dans un premier temps, la seconde application se charge de déplacer ces fichiers vers un repertoire donné (pas de soucis de ce coté la, tout marche très bien)

Le problème que je rencontre, c'est que l'application sur laquelle on drop sempble fonctionner, mais seulement un moment puis se bloque. Je soupconne une fuite de mémoire au niveau du code de mon DragQueryFile, mais je n'arrive pas à trouver pourquoi.

A moins que j'ai mal utilisé la fonction elle même ?

Je vous mets un bout de code (j'ai utilisé le projet de base pour une app windows sous dev-cpp, et j'ai juste touché à la winproc, je ne mets doonc que cette dernière)

Si quelqu'un à une idée, je le remercie d'avance !



Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  /* handle the messages */
    {
        case WM_CREATE:
            DragAcceptFiles(hwnd,TRUE);
            break;
        
            
         case WM_DROPFILES:        
            HDROP hDropFiles;
            int   nFile,i;

            hDropFiles = (HDROP)wParam;
            nFile = DragQueryFile(hDropFiles,0xFFFFFFFF,NULL,0); // nombre de fichiers si 0xFFF...

            for(i=0;i<nFile;i++)
            {
                char              *nameFile;
                int               nChar;
                WIN32_FIND_DATA   dataFile;
                HANDLE            hFile;
                

                
                nChar = 1 + DragQueryFile(hDropFiles,i,NULL,0); // aile du buffer --> NULL
                nameFile = (char*) malloc(nChar * sizeof(char));

                DragQueryFile(hDropFiles,i,nameFile,nChar);

                ShellExecute
                (
                    NULL,	// handle to parent window
                    "open",	// pointer to string that specifies operation to perform
                    "ClassURL.exe",	// pointer to filename or folder name string
                    nameFile,	// pointer to string that specifies executable-file parameters 
                    NULL,	// pointer to string that specifies default directory
                    SW_MINIMIZE 	// whether file is shown when opened
                );
    
                FindClose(hFile);
                free(nameFile);
            }
            DragFinish(hDropFiles);

            break;
                
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
            
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}