代码之家  ›  专栏  ›  技术社区  ›  Oliver Salzburg

带有TDM的SendMessage\单击\按钮返回值始终为零

  •  1
  • Oliver Salzburg  · 技术社区  · 15 年前

    在我的C应用程序中,我试图使用 TDM_CLICK_BUTTON 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 在抛出异常时总是为零。这将是另一个表明一切正常的指标。

    发送消息 在我的代码中声明如下:

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

    是文档不正确还是我使用的信息不正确?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Oliver Salzburg    15 年前

    所以我也使用C++ Windows SDK TaskCudio示例,并尝试了这个消息。的返回值 SendMessage 始终保持零。

    TDN_BUTTON_CLICKED 将始终发送通知(即使按钮id不存在)。如果按钮存在或不存在,则对 发送消息 返回值。

    TRUE/FALSE/S_OK/42 ),我的 发送消息 返回值保持为零。

    编辑:我收到了对我几天前发送的文档反馈的回复。结果证明文件确实不正确。返回值将被忽略。

    推荐文章