SendMessage с TDM_CLICK_BUTTON, возвращаемое значение всегда равно нулю
В моем приложении C# я пытаюсь использовать TDM_CLICK_BUTTON
сообщение о нажатии кнопки в TaskDialog. Это в основном работает просто отлично. То, что я ожидаю, случится, случится. Я даже получаю TDN_BUTTON_CLICKED
уведомление.
Но в документации сказано, что возвращаемое значение SendMessage
будет ненулевым, если вызов будет успешным. Но это всегда возвращает ноль для меня.
Это мой код:
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
всегда равен нулю, когда выбрасывается исключение. Что было бы еще одним показателем того, что все в порядке.
SendMessage
объявлен в моем коде так:
[DllImport( "user32.dll", SetLastError = true )]
internal static extern IntPtr SendMessage( IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam );
Документация неверна или я неправильно использую сообщение?
1 ответ
Поэтому я взял пример CD Windows SDK TaskDialog и попробовал это сообщение там же. Возвращаемое значение SendMessage
остается нулевым всегда.
Я заметил, что TDN_BUTTON_CLICKED
уведомление будет отправлено всегда (даже если идентификатор кнопки не существует). Если кнопка существует или нет, не влияет на SendMessage
возвращаемое значение
Тогда я подозревал, что возвращаемое значение для этого уведомления может иметь эффект, но независимо от того, что я возвращаю из обратного вызова (TRUE/FALSE/S_OK/42
) мой SendMessage
возвращаемое значение остается нулевым.
Итак, учитывая, что я не нашел способа сделать это неудачным и / или вернуть ненулевое значение, я могу только предположить, что документация неверна.
редактировать: я получил ответ на мою документацию обратной связи, которую я отправил несколько дней назад. Оказывается, документация действительно неверна. Возвращаемое значение следует игнорировать.