tdm_click_buttonのsendmessage return return値は常にゼロです
-
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
戻り値はゼロのままです。
したがって、これを失敗させたり、ゼロ以外の値を返す方法を見つけなかったことを考えると、ドキュメントが間違っていると仮定することしかできません。
編集:数日前に送信したドキュメントフィードバックへの返信がありました。ドキュメントは確かに間違っていることがわかりました。返品値は無視されます。