Bonjour a tous,
Je viens quemander votre aide au sujet d'un probleme que je viens de rencontrer en utilisant la fonction PostThreadMessage.
J'ai deux applications que je fais communiquer en utilisant des messages.
Actuellement, j'ai le code suivant et cela marche :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
unsigned int uiValue = 13;
double dValue = 25.3;
CWnd* pWnd = NULL; 
pWnd = FindWindow(NULL, _T("MyApp"));
 
if (pWnd)    
     PostThreadMessage(GetWindowThreadProcessId(pWnd->GetSafeHwnd(), NULL), WM_UPDATE_PARAMETER, uiValue, (LPARAM)dValue);
Dans l'application "MyApp", je recois correctement le message.
Maintenant, j'aimerais changer cette facon de faire car le nom de l'application peut changer. Hors comme le nom de l'executable est toujours le meme, j'ai essaye le code suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
DWORD dwProcessID = dwGetProcessID(_T("MyApp.exe"));
PostThreadMessage(dwProcessID, WM_UPDATE_PARAMETER, uiValue, (LPARAM)dValue);
Lorsque je regarde l'erreur avec GetLastError(), j'ai
1444 = ERROR_INVALID_THREAD_ID...
Note :
La fonction "dwGetProcessID()" est definit comme ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
#include "Tlhelp32.h"
 
DWORD dwGetProcessID(CString csProcessName)
{
	HANDLE hndl = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	DWORD dwsma = GetLastError();
	DWORD dwExitCode = 0;
	PROCESSENTRY32  procEntry = {0};
	procEntry.dwSize = sizeof(PROCESSENTRY32);
	Process32First(hndl, &procEntry);
	BOOL bSWFound = FALSE;
 
	// Look for the control SW in the list of processes
	do
	{
		if (!_wcsicmp(procEntry.szExeFile, csProcessName))
		{
			bSWFound = TRUE;
			break;
		}
	}
	while(Process32Next(hndl, &procEntry));
 
	if (bSWFound == TRUE)
		return procEntry.th32ProcessID;
	else
		return 0;
}
Je ne comprends pas pourquoi dans un cas, cela fonctionne et dans l'autre non...
Merci d'avance.