SendMessage con valore restituito TDM_CLICK_BUTTON è sempre zero
-
28-09-2019 - |
Domanda
Nel mio C # Sto cercando di utilizzare il messaggio TDM_CLICK_BUTTON
fare clic su un pulsante in un TaskDialog. Questo funziona sostanzialmente bene. Quello che mi aspetto che accada, succede. Ricevo anche la notifica TDN_BUTTON_CLICKED
.
Ma la documentazione dice, che il valore di ritorno di SendMessage
sarebbe diverso da zero se la chiamata riesce. Ma restituisce sempre zero per me.
Questo è il mio codice:
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
è sempre zero quando viene generata l'eccezione. Che sarebbe un altro indicatore che tutto va bene.
SendMessage
è dichiarata nel mio codice in questo modo:
[DllImport( "user32.dll", SetLastError = true )]
internal static extern IntPtr SendMessage( IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam );
E 'la documentazione non corretta o sto utilizzando il messaggio in modo non corretto?
Soluzione
Così ho preso il campione C ++ SDK di Windows TaskDialog e provato questo messaggio in là pure. Il valore restituito SendMessage
rimane a zero sempre.
ho notato che una notifica TDN_BUTTON_CLICKED
verrà sempre inviato (anche se il pulsante ID non esiste). Se il pulsante esiste o no non ha alcun effetto sul valore di ritorno SendMessage
.
Poi ho sospettato, che il valore di ritorno per la notifica che potrebbe avere un effetto, ma non importa quello che io ritorno dal callback (TRUE/FALSE/S_OK/42
), il mio valore di ritorno SendMessage
rimane zero.
Quindi, dato che ho trovato alcun modo per rendere questo fallire e / o restituire un valore diverso da zero, posso solo supporre che la documentazione non è corretta.
modifica: ho ricevuto una risposta alla mia reazione documentazione ho inviato qualche giorno fa. Si scopre che la documentazione è davvero corretto. Il valore di ritorno deve essere ignorato.