1

私の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例外がスローされると、常にゼロになります。これは、すべてが正常であることを示すもう1つの指標になります。

SendMessage私のコードでは次のように宣言されています:

[DllImport( "user32.dll", SetLastError = true )]
internal static extern IntPtr SendMessage( IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam );

ドキュメントが間違っていますか、それともメッセージを間違って使用していますか?

4

1 に答える 1

1

そこで、C ++ Windows SDK TaskDialogサンプルを取得し、このメッセージも試してみました。の戻り値はSendMessage常にゼロのままです。

TDN_BUTTON_CLICKED(ボタンIDが存在しない場合でも)通知が常に送信されることに気付きました。ボタンが存在するかどうかは、SendMessage戻り値に影響しません。

TRUE/FALSE/S_OK/42次に、その通知の戻り値が影響を与える可能性があると思いましたが、コールバック( )から何を返しても、SendMessage戻り値はゼロのままです。

したがって、これを失敗させたり、ゼロ以外の値を返す方法が見つからなかったことを考えると、ドキュメントが正しくないと推測することしかできません。

編集:数日前に送信したドキュメントのフィードバックに対する返信を受け取りました。ドキュメントが確かに間違っていることが判明しました。戻り値は無視されます。

于 2010-06-21T20:06:03.937 に答える