質問

私の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 );

ドキュメントは正しくありませんか、それともメッセージを正しく使用していませんか?

役に立ちましたか?

解決

そこで、C ++ Windows SDK TaskDialogサンプルを撮影し、このメッセージも試しました。の返品値 SendMessage 常にゼロのままです。

私はそれに気づきました TDN_BUTTON_CLICKED 通知は常に送信されます(ボタンIDが存在しなくても)。ボタンが存在するかどうかは、 SendMessage 返品値。

それから私は、その通知の返品値が効果があるかもしれないと疑ったが、コールバックから何を返しても(TRUE/FALSE/S_OK/42)、 私の SendMessage 戻り値はゼロのままです。

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

編集:数日前に送信したドキュメントフィードバックへの返信がありました。ドキュメントは確かに間違っていることがわかりました。返品値は無視されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top