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 :
Dans l'application "MyApp", je recois correctement le message.
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);
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 :
Lorsque je regarde l'erreur avec GetLastError(), j'ai
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);Note :1444 = ERROR_INVALID_THREAD_ID...
La fonction "dwGetProcessID()" est definit comme ceci :
Je ne comprends pas pourquoi dans un cas, cela fonctionne et dans l'autre non...
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; }
Merci d'avance.
Partager