Bonjour,
J'ai souvent utilisé les messages DDE pour permettre à mon application
de s'exécuter en une seule instance après avoir
double cliqué sur un fichier dont le type est associé à
l'application. Cela empêche donc l'ouverture d'une nouvelle
instance du programme pour chaque fichier. L'application
reçoit le chemin complet du fichier et se charge de
le traiter. Voici un petit exemple dans la procédure d'une fenêtre
(hWnd):
case WM_DDE_INITIATE:
SendMessage((HWND) wParam,WM_DDE_ACK,(WPARAM)hWnd,0);
return 0;
case WM_DDE_EXECUTE:
char* pcommand;
pcommand = (char*)GlobalLock ((HANDLE) lParam);
//........ pcommand contient la ligne de commande avec chemin du fichier à récupérer et traiter
GlobalUnlock ((HANDLE) lParam);
DDEACK DdeAck;
WORD wStatus;
DdeAck.bAppReturnCode = 0 ;
DdeAck.reserved = 0 ;
DdeAck.fBusy = 0;
DdeAck.fAck = 0;
wStatus = *((WORD *) &DdeAck) ;
PostMessage ((HWND) wParam, WM_DDE_ACK, (WPARAM) hWnd,PackDDElParam (WM_DDE_ACK, wStatus, (UINT) pcommand));
return 0;
case WM_DDE_TERMINATE :
PostMessage ((HWND) wParam, WM_DDE_TERMINATE, (WPARAM) hWnd, 0);
return 0;
Pour pouvoir recevoir les messages DDE, le type du fichier ouvert doit
être associé à l'application. Dans la base de registre, le type
de fichier associé doit contenir la sous clé ddeexec:
HKEY_CLASSES_ROOT\typefichier\shell\open\ddexec
Il suffit de regarder la base de registre avec regedit pour voir des exemples.
L'autre utilisation (que j'ai jamais utilisée) des messages DDE est l'échange de données entre applications.
Voici le lien MSDN au sujet de DDE:
[ Lien ]