Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 2016
-
9 mars 2009 à 19:49
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 2013
-
10 mars 2009 à 00:00
Bonsoir,
j'ai un petit problème avec l'envoi d'un message avec HWND_BROADCAST.
Quand on fait (Post)SendMessage(HWND_BROADCAST, WM_MESSAGE, 73, 917);
Chaque fenêtre principale est supposée recevoir un message WM_MESSAGE, avec comme wParam 73 et lParam 917.
Or, si moi je fais par exemple ça :
procedure TForm1.WMMESSAGE(var Message: TMessage);
begin
Caption := IntToStr(Message.lParam);
inherited;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
PostMessage(HWND_BROADCAST, WM_MESSAGE, 0, 857);
end;
Eh bien ma fenêtre ne recoit pas de message, pourtant c'est la fenêtre principale ! Si je remplace HWND_BROADCAST par Handle (le handle de ma fiche), ça marche ...
Pourquoi ça ne marche pas ? Ma fenêtre n'est-elle pas considérée comme principale par Windows ?
procedure TForm3.Button1Click(Sender: TObject);
begin
SendMessage(HWND_BROADCAST, WM_BCMESSAGE, 17, 197);
end;
procedure TForm3.Button2Click(Sender: TObject);
var
BSMRecip : DWORD;
begin
BSMRecip := BSM_APPLICATIONS;
BroadcastSystemMessage(BSF_POSTMESSAGE, @BSMRecip, WM_BCMESSAGE, 17, 197);
end;
procedure TForm3.DefaultHandler(var Message);
var
BCMsg : TWMBCMessage;
begin
with TMessage(Message) do
begin
if (Msg = WM_BCMESSAGE) then
begin
BCMsg.MsgID := Msg;
BCMsg.LParam := LParam;
BCMsg.WParam := WParam;
BCMsg.result := 0;
WMBCMessage(BCMsg);
end
else
inherited DefaultHandler(Message);
end;
end;
procedure TForm3.WMBCMessage(var Msg: TWMBCMessage);
var Tm, Ms : string;
begin
Ms := Format('MID%.8x LP=%d WP=%d RS=%d',[Msg.MsgID, Msg.LParam, Msg.WParam, Msg.result]);
DateTimeToString(Tm, 'dd/mm/yy hh:nn', Now);
ListBox1.Items.Add(Tm + ' '+Ms);
end;
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 9 mars 2009 à 20:43
Hmm ... RegisterWindowsMessage.
Je n'ai pas testé mais c'est probablement de là que vient le problème, Windows doit se dire : "c'est quoi ce message à la con qu'il veut que je passe, allez je jette.".
Cordialement, Bacterius !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 9 mars 2009 à 23:32
mets un point d'arrêt dans le code
fais F9 ... quand le programme s'arrête
Menu --> Chercher --> Erreur d'exécution
et rentres l'adresse de l'erreur "AC16"
et regarde ou le curseur t'emmène
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 10 mars 2009 à 00:00
"Mais est-on obligé de passer par un nouveau type enregistrement de message, ne peut-on pas passer par TMessage ?"
tu peux tres bien utiliser un TMessage, le tout c'est d'avoir un packed record de la meme taille qu'un TMessage, que tu organise comme tu veux.
"Exception EOSError ..." il y a peut etre des regles de nommage du message a respecter, regarde dans l'aide de registerWindowMessage.