SendMessage مع TDM_CLICK_BUTTON قيمة الإرجاع هي دائما صفر
-
28-09-2019 - |
سؤال
في تطبيق C# أحاول استخدام TDM_CLICK_BUTTON
رسالة للنقر فوق زر في TockDialog. هذا يعمل بشكل أساسي على ما يرام. ما أتوقع أن يحدث ، يحدث. حتى أنني أتلقى 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
سيتم إرسال الإخطار دائمًا (حتى إذا لم يكن معرف الزر موجودًا). إذا كان الزر موجودًا أم لا ليس له أي تأثير على SendMessage
قيمة الإرجاع.
ثم أظن ، أن قيمة الإرجاع لهذا الإخطار قد يكون لها تأثير ، ولكن بغض النظر عن ما أعود إليه من رد الاتصال (TRUE/FALSE/S_OK/42
)، لي SendMessage
تبقى قيمة الإرجاع صفر.
لذلك ، بالنظر إلى أنني لم أجد أي طريقة لجعل هذا الفشل و/أو إرجاع قيمة غير صفرية ، لا يمكنني إلا أن أفترض أن الوثائق غير صحيحة.
تحرير: تلقيت ردًا على ملاحظات الوثائق التي أرسلتها قبل بضعة أيام. تبين أن الوثائق غير صحيحة بالفعل. يتم تجاهل قيمة الإرجاع.