Probleme avec SendMessage()

Messages postés
246
Date d'inscription
dimanche 2 juin 2002
Statut
Membre
Dernière intervention
11 septembre 2016
- - Dernière réponse : cs_AlexMAN
Messages postés
1537
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
- 12 août 2005 à 10:51
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
Afficher la suite 

2 réponses

Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
0
Merci
reagarde 2 ou 3 posts plus bas, même réponse.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
1537
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
1
0
Merci
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).
Commenter la réponse de cs_AlexMAN