Ouio bien sûr, je n'ai pas mis ce code dans mon post mais il existe. Ce n'est pas le problème :
1 2 3 4 5 6 7 8 9 10 11
|
procedure TMes.WndProc(var msg: TMessage);
begin
trace('WndProc : entrée (réception d''un message) ');
if (Msg.Msg = WM_PRG_TO_DLL_CONNECT) and (WHO_AM_I = Dll) then begin
trace('WndProc : Réception de WM_PRG_TO_DLL_CONNECT');
end;
if (Msg.Msg = WM_PRG_TO_SVC_ALIVE) and (WHO_AM_I = Svc) then begin
trace('WndProc : Réception de WM_PRG_TO_SVC_ALIVE');
end;
end; |
Heu ... Je parle des API SetWindowText et GetWindowText, pas des messages inter-process.
Pour faire simple, et en dehors du contexte Thread/Message, si je veux simplement créer une Windows et lui attribuer un titre, je fais :
1 2 3 4 5 6 7
|
FWinHandle := AllocateHWND(WndProc);
SetWindowText(FWinHandle, 'Le titre que je veux');
// Pour vérifier :
GetWindowText(FWinHandle, dbg, Length(dbg)); |
En dehors de tout Thread, WM etc., je devrais bien récupérer 'Le titre que je veux' dans ma variable dbg non ?
En clair pour envoyer le message à la bonne fenêtre je faisais :
SendMessageTimeout(nil,FindWindow(PChar(WinProc[TBbProc.SVC])), WM_PRG_TO_SVC_ALIVE, 0, 0, SMTO_BLOCK, 1000, nil);
mais comme FindWindow ne marche pas (parce que GetWindowsText ou SetWindowText ne marchent pas), j'utilise :
SendMessageTimeout(FindWindow(PChar(WinProc[TBbProc.SVC]),nil), WM_PRG_TO_SVC_ALIVE, 0, 0, SMTO_BLOCK, 1000, nil);
La ça fonctionne car le FindWindow est fait sur la classe de la fenêtre (mais j'ai dû refaire un AllocateHWND qui permet de passer la classe en paramètre quand on crée la Windows). Donc, j'ai contourné le problème en réécrivant un AllocateHWND maison, auquel je peux passer la class en paramètre.
Mais pourquoi donc le SetWindowText/GetWindowsText ne fonctionnent-ils pas ?
Partager