具有TDM_CLICK_BUTTON的SendMessage返回值始终为零

时间:2010-06-19 21:57:29

标签: c# winapi sendmessage taskdialog

在我的C#应用​​程序中,我正在尝试使用TDM_CLICK_BUTTON消息单击TaskDialog中的按钮。这基本上工作得很好。我期待发生的事情发生了。我甚至收到TDN_BUTTON_CLICKED通知。

但是documentation说,如果调用成功,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 个答案:

答案 0 :(得分:1)

所以我采用了C ++ Windows SDK TaskDialog示例并在那里尝试了这个消息。 SendMessage的返回值始终为零。

我注意到将始终发送TDN_BUTTON_CLICKED通知(即使按钮ID不存在)。如果按钮存在与否对SendMessage返回值没有影响。

然后我怀疑,该通知的返回值可能有效,但无论我从回调(TRUE/FALSE/S_OK/42)返回什么,我的SendMessage返回值仍为零。

因此,鉴于我发现无法使此失败和/或返回非零值,我只能假设文档不正确。

编辑:我收到了我几天前发送的文档反馈的回复。原来文档确实不正确。返回值将被忽略。

相关问题