SendMessage avec la valeur de retour de TDM_CLICK_BUTTON est toujours égale à zéro
-
28-09-2019 - |
Question
Dans mon application C # Je suis en train d'utiliser le message de TDM_CLICK_BUTTON
cliquer sur un bouton dans un TaskDialog. Cela fonctionne très bien en fait. Ce que je pense arriver, arrive. Je reçois même la notification de TDN_BUTTON_CLICKED
.
Mais la documentation dit, que la valeur de retour de SendMessage
serait non nulle si l'appel réussit. Mais elle retourne toujours zéro pour moi.
Ceci est mon code:
public void ClickButton( int buttonId ) {
bool success = UnsafeNativeMethods.SendMessage(
WindowHandle,
(uint)UnsafeNativeMethods.TASKDIALOG_MESSAGES.TDM_CLICK_BUTTON,
(IntPtr)buttonId,
IntPtr.Zero ) != IntPtr.Zero;
if( !success ) {
int lastWin32Error = Marshal.GetLastWin32Error();
throw new Win32Exception( lastWin32Error, "SendMessage for TDM_CLICK_BUTTON failed." );
}
}
lastWin32Error
est toujours égale à zéro lorsque l'exception est levée. Ce qui serait un autre indicateur que tout va bien.
SendMessage
est déclaré dans mon code comme ceci:
[DllImport( "user32.dll", SetLastError = true )]
internal static extern IntPtr SendMessage( IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam );
La documentation est incorrecte ou que j'utilise le message de façon incorrecte?
La solution
Je pris l'échantillon C ++ SDK Windows TaskDialog et essayé ce message là-dedans aussi. La valeur de retour de SendMessage
reste toujours égale à zéro.
Je remarque qu'une notification TDN_BUTTON_CLICKED
sera toujours envoyé (même si l'identifiant du bouton n'existe pas). Si le bouton existe ou non n'a pas d'effet sur la valeur de retour de SendMessage
.
Alors je me doutais que la valeur de retour de cette notification pourrait avoir un effet, mais peu importe ce que je reviens du rappel (TRUE/FALSE/S_OK/42
), ma SendMessage
valeur de retour reste zéro.
Alors, étant donné que j'ai trouvé aucun moyen de faire échouer cette et / ou de renvoyer une valeur non nulle, je ne peux que supposer que la documentation est incorrecte.
edit: Je suis une réponse à mes commentaires de la documentation que j'ai envoyé il y a quelques jours. Il s'avère que la documentation est en effet incorrect. La valeur de retour doit être ignoré.