SendMessage с TDM_CLICK_BUTTON, возвращаемое значение всегда равно нулю - PullRequest
1 голос
/ 20 июня 2010

В моем приложении на 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 Ответ

1 голос
/ 22 июня 2010

Итак, я взял образец TaskDialog для Windows SDK C ++ и попробовал это сообщение там же.Возвращаемое значение SendMessage всегда остается нулевым.

Я заметил, что уведомление TDN_BUTTON_CLICKED будет отправляться всегда (даже если идентификатор кнопки не существует).Если кнопка существует или нет, не влияет на возвращаемое значение SendMessage.

Тогда я подозревал, что возвращаемое значение для этого уведомления может иметь эффект, но независимо от того, что я возвращаю из обратного вызова (TRUE/FALSE/S_OK/42), мое SendMessage возвращаемое значение остается нулевым.

Итак, учитывая, что я не нашел способа сделать это неудачным и / или вернуть ненулевое значение, я могу только предположить, что документация неверна.

edit: я получил ответ на свой отзыв о документации, который я отправилнесколько дней назад.Оказывается, документация действительно неверна.Возвращаемое значение следует игнорировать.

...