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抛出异常时始终为零。这将是一切都很好的另一个指标。

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 回答