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 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