Probleme avec SendMessage()

Signaler
Messages postés
246
Date d'inscription
dimanche 2 juin 2002
Statut
Membre
Dernière intervention
11 septembre 2016
-
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
-
Bonjour,
J'ai une application qui reçois des fichiers en argument dans le main (ie on fait glisser un fichier sur l'executable). Je recupere donc le chemin de mon fichier dans lpCmdLine (argv).


Dans le cas où l'application serait déjà ouverte, et donc où l'utilisateur lance une deuxieme fois l'application, la seconde application envoie à la premiere le chemin du fichier qu'elle a reçu en argument. Voila le code que j'ai écrit (pour être plus clair):

#define WM_COUCOU 4599
...
int WINAPI WinMain(..., ..., LPSTR lpCmdLine, ...) // lpCmdLine : ptr sur la ligne de commande (ie: argv[], argc)
{
...
HWND hWnd;
if (hWnd = FindWindow(NULL, "Le Nom du Programme"))
SendMessage(hWnd, WM_COUCOU, (WPARAM) lpCmdLine, 0);
else
DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG2), NULL, ( DLGPROC ) DlgProc);
...
}


LRESULT CALLBACK DlgProc(...)
{
...
switch(msg)
{
case WM_COUCOU:
MessageBox(NULL, (char*) wParam, "test", NULL);
break;
...
}
...
}

Le problème est que le lpCmdLine de la premiere application contient le bon chemin, mais le wParam de la seconde ne contient pas le bon.....(wParam contient le chemin du fichier glissé vers la premiere application). J'ai beau chercher et rechercher pourquoi, je ne comprend pas, ça ne me paraît pas logique :(


Glipper

2 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
reagarde 2 ou 3 posts plus bas, même réponse.

ciao...
BruNews, MVP VC++
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Bon je te refais la reponse : ton pointeur est valide dans ton processus, mais sur quoi va t-il pointer dans un autre espace memoire ?
Ensuite, pour detecter une 1ere instance d'un prog, regarde une source de BruNews qui utilise des techniques bien plus fiables qu'un simple FindWindow(). Et pis pour ton pb, je pense qu'il te faudra utiliser le filemapping (c'est la seule solution que je vois).