图与TDM_CLICK_BUTTON返回值始终是零
-
28-09-2019 - |
题
在我的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
回值仍然是零。
所以,鉴于我没有发现方式,使这种失败和/或返回一个非零价值,我们只能假设的文件是不正确的。
编辑:我有个答复我的文件的反馈我发几天前。事实证明文件确实是不正确的。返回值是被忽略。
不隶属于 StackOverflow