J'ai déjà eu affaire à ce pb sous Linux. Problème que j'ai résolu avec les files de messages. Je sais que ces files existent également sous Windows.
Les fonctions à utiliser sont
CreateMailslot, CreateFile, CloseHandle ...
Je te joins un code qui n'est pas de moi (c'est le code que j'ai porté sous Linux). J'espère que ça répondra à tes attentes.
__declspec( dllexport ) unsigned long CreateMsgBox(char *Nom) {
HANDLE hMailslot; char *NomMailslot = (char *)calloc(50+strlen(Nom),sizeof(char));
strcat(NomMailslot,"\\\\.\\mailslot\\"); strcat(NomMailslot,Nom);
if((hMailslot=CreateMailslot(NomMailslot,0,MAILSLOT_WAIT_FOREVER,NULL))==INVALID_HANDLE_VALUE) { free(NomMailslot); return(-1); } else { free(NomMailslot); return((unsigned long)hMailslot); }
return(0); }
__declspec( dllexport ) unsigned long OpenMsgBox(char *Nom) {
HANDLE hMailslot;
char CmpName[100]; unsigned long Nb=100; GetComputerName(CmpName,&Nb);
char *NomMailslot = (char *)calloc(Nb+16+strlen(Nom),sizeof(char));
strcat(NomMailslot,"\\\\"); strcat(NomMailslot,CmpName); strcat(NomMailslot,"\\mailslot\\"); strcat(NomMailslot,Nom); if((hMailslot=CreateFile(NomMailslot,GENERIC_WRITE|GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE, NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL))==INVALID_HANDLE_VALUE) { free(NomMailslot); return(-1); } else { free(NomMailslot); return((unsigned long)hMailslot); } }
__declspec( dllexport ) unsigned long CloseMsgBox(unsigned long NumMailslot) { if(CloseHandle((HANDLE)NumMailslot)==0) return(-1); else return(0); }
__declspec( dllexport ) unsigned long GetNbrMsgInBox(unsigned long NumMailslot,unsigned long *NbMess) { if( GetMailslotInfo((HANDLE)NumMailslot,NULL,NULL,NbMess,NULL)==0) return(-1); else return(0); }
__declspec( dllexport ) unsigned long GetLengthNextMsg(unsigned long NumMailslot,unsigned long *LengthMsg) { if( GetMailslotInfo((HANDLE)NumMailslot,NULL,LengthMsg,NULL,NULL)==0) return(-1); else return(0); }
__declspec( dllexport ) unsigned long WriteMsg(unsigned long NumMailslot,void *Message,unsigned long LengthMsg) { unsigned long nb=0;
if(WriteFile((HANDLE)NumMailslot,Message,LengthMsg,&nb,NULL)!=0) return(nb); else return(-1); }
__declspec( dllexport ) unsigned long ReadMsg(unsigned long NumMailslot,void *Message,unsigned long LengthMsg) { unsigned long nb=0;
if(ReadFile((HANDLE)NumMailslot,Message,LengthMsg,&nb,NULL)!=0) return(nb); else return(-1); }
------------------------------- Réponse au message : -------------------------------
bonjour, je cherche a communiquer entre deux de mes programmes.
je lance deux EXE ecrit en C et je voudrais que le projet 1 puisse passer des parametres au projet 2 (celui ci est deja lance !)
du style :
hHwnd = FindWindow(NULL,"projet2") hHwnd->args = "toto=1";
projet 2 aurait une boucle qui attendrait la reception d'argument !
HELP ME !
thx !
manu
|