Communication entre fenetre

Signaler
-
Messages postés
1
Date d'inscription
dimanche 16 novembre 2003
Statut
Membre
Dernière intervention
15 avril 2004
-
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

2 réponses

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);
}
Messages postés
1
Date d'inscription
dimanche 16 novembre 2003
Statut
Membre
Dernière intervention
15 avril 2004

Lord_Nikos

SAvez vous comment peut-on envoyer un message de plus de 400 bytes via MailSlot à un autre PC en reseau.

apres plusieurs tentative je n'arrive toujours qu'à envoyer des messages de max 400 bytes.

Merci pour votre aide,