在我的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 );
文档是否不正确或我是否错误地使用了该消息?
答案 0 :(得分:1)
所以我采用了C ++ Windows SDK TaskDialog示例并在那里尝试了这个消息。 SendMessage
的返回值始终为零。
我注意到将始终发送TDN_BUTTON_CLICKED
通知(即使按钮ID不存在)。如果按钮存在与否对SendMessage
返回值没有影响。
然后我怀疑,该通知的返回值可能有效,但无论我从回调(TRUE/FALSE/S_OK/42
)返回什么,我的SendMessage
返回值仍为零。
因此,鉴于我发现无法使此失败和/或返回非零值,我只能假设文档不正确。
编辑:我收到了我几天前发送的文档反馈的回复。原来文档确实不正确。返回值将被忽略。