在我的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