سؤال

في تطبيق 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 تبقى قيمة الإرجاع صفر.

لذلك ، بالنظر إلى أنني لم أجد أي طريقة لجعل هذا الفشل و/أو إرجاع قيمة غير صفرية ، لا يمكنني إلا أن أفترض أن الوثائق غير صحيحة.

تحرير: تلقيت ردًا على ملاحظات الوثائق التي أرسلتها قبل بضعة أيام. تبين أن الوثائق غير صحيحة بالفعل. يتم تجاهل قيمة الإرجاع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top