[Win32] Passer une chaîne entre deux fenêtres

yo! tous,

Je cherche à faire un truc super basique mais sans me prendre la tête.
J’ai une appli qui se lance. Elle vérifie si une instance d’elle-même n’est pas déjà en train de tourner. Si c’est le cas elle envoie un message à la fenêtre de l’appli déjà existante, puis quitte.
Le problème c’est que je voudrais transmettre la ligne de commande à l’appli déjà existante. Il y a bien tout le système de shared memory (file mapping) ou même le clipboard mais ça m’oblige à écrire plein de code.
Comme je suis un gros fainéant, je me demandais s’il n’existait pas quelques fonctions toutes simples pour faire ça.
Genre faire :

ptr=AllocSharedString() strcpy(ptr,cmdline); SendMessage(wnd,WM_USER+30,(WPARAM)ptr,0);
et de l’autre côté :

case (WM_USER+30): do_plein_de_choses((char*)wParam); FreeSharedString(wParam);
épicétou !

J’y crois moyen, mais dès fois que…

Merciiiii
Antoine

PS1 : C/C++, Win32
PS2 : déjà tenté GlobalAlloc. Marche pas.

SendMessage est effectivement une très bonne solution a ton probleme. L’inconvenient étant effectivement de savoir qui alloue la mémoire… J’ai moi même utilisé le systeme pour passer des messages a WinAmp, mais comme j’utilisais alors un systeme managé (VB, puis C#), c’est pas moi qui me suis fais chier avec la mémoire.

Faudrait regarder du coté des How To ayant rapport a SendMessage.

Sinon, regarde le message WM_COPYDATA…

Re-Edit :
En effet, WM_COPYDATA a l’air d’être LE message a utiliser. t’as un exemple du comment dans la MSDN.

[quote name=‹ Tzim › date=’ 19 Jun 2005, 13:08’]Re-Edit :
En effet, WM_COPYDATA a l’air d’être LE message a utiliser. t’as un exemple du comment dans la MSDN.
[right][post=« 369807 »]<{POST_SNAPBACK}>[/post][/right][/quote]

Je viens de trouver ça avec google :
http://www.vbaccelerator.com/codelib/ssubtmr/startup.htm
Matte le « 3. Send the command line of one instance of your app cross-instance to the existing one. », la 2eme partie.

C’est du VB, mais c’est facilement adaptable en C :stuck_out_tongue:

---- edit ----
Quoique l’exemple dans la msdn devrait te suffir aussi, oui.

Merci pour les infos.
Bon finalement je suis allé au plus simple et au plus trash : File Mapping perso + SendMessage.
Comme j’ai un fichier INI pour l’application, la nouvelle instance écrit dedans et peut quitter, tandis que l’instance existante reçoit le message et va donc lire le fichier INI.
Bête et méchant mais fonctionne bien :stuck_out_tongue:

Antoine

Yes, je confirme WM_COPYDATA c’est fait pour, mefie toi des cas ou ton appli cible ne pompe plus car dans ce cas tu te retrouve avec deux process bloques complet au lieu d’un.

[quote name=‹ GloP › date=’ 19 Jun 2005, 22:52’]…mefie toi des cas ou ton appli cible ne pompe plus…
[right][post=« 369926 »]<{POST_SNAPBACK}>[/post][/right][/quote]

Roooooh, Glop, gros cochon va… :stuck_out_tongue:

Huhu, l’important c’est de jamais s’arreter de pomper :P, des messages, bien sur.