glipper
Messages postés246Date d'inscriptiondimanche 2 juin 2002StatutMembreDernière intervention11 septembre 2016
-
11 août 2005 à 22:43
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 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);
...
}
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 :(
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 12 août 2005 à 10:51
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).