| 12
 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
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 
 |  
#define WM_ADDFILE      (WM_USER    + 2010)
#define WM_ADDFILESTART (WM_ADDFILE +   10)
#define FILEMAPPINGNAME "VieuxVerFileMapping_"
 
//---------------------------------------------------------------------------
void __fastcall SendFileToPrevious(HANDLE hFileMap)
{
    //on retrouve l'instance précédente
    //ATTENTION : les messages seront passés à la fiche principale et non pas à l'application
    //donc il faut retrouver la fiche principale
    HWND hPreviousInstance = FindWindow( "TMainFormFrm", NULL);
 
    if (hPreviousInstance)    //c'est cool, on l'a trouvée
    {
        //On retrouve la mémoire partagée
        char* pFile = (char*)MapViewOfFile(hFileMap, FILE_MAP_WRITE, 0, 0, 0);
 
        int i = 1;
 
        //on file tous les fichiers.
        while (ParamStr(i) != "")
        {   
            //attendre que les fichiers précédents aient étés traités avant d'écrire en mémoire
            //VOIR (*)
            SendMessage(hPreviousInstance, WM_ADDFILESTART, 0, 0);
 
            strcpy(pFile, ParamStr(i).c_str());	//écrit le nom du fichier dans la mémoire partagée
            SendMessage(hPreviousInstance,	//dire à l'instance précédente qu'il y a un fichier
                WM_ADDFILE,
                (WPARAM)( ( ((DWORD)hFileMap) & 0xFFFF0000 ) >> 16 ),	//heu je ne me rappelle plus de la taille des (W/L)Param
                (LPARAM)(   ((DWORD)hFileMap) & 0xFFFF)    );		//alors je passe deux octets du handle du fichier sur chaque
 
            i++;
        }
 
        UnmapViewOfFile(hFileMap);
    }
}
 
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    Application->Title = APPNAME;
 
    //on crée le segment de mémoire partagée
    HANDLE hFileMap = CreateFileMapping((HANDLE)0xFFFFFFFF, NULL, PAGE_READWRITE,
                 0, MAX_PATH, FILEMAPPINGNAME);
 
    if (GetLastError() == ERROR_ALREADY_EXISTS) //le programme est déjà lancé
    {
        if (ParamStr(1) != "")	//allez hop, on file les fichiers au prog
            SendFileToPrevious(hFileMap);
 
        return 0;
    }
 
    try
    {
         //... initialisation de l'appli
    }
    catch (Exception &exception)
    {
         Application->ShowException(&exception);
    }
    catch (...)
    {
         //...
    }
 
    //Penser à fermer le fichier avant de partir
    CloseHandle(hFileMap);
    return 0;
} | 
Partager