سؤال

TL ؛ DR:عند تصفح خصائص عنصر تحكم DataGridView للبرنامج باستخدام ManagedSpy ، فإنه يتسبب في تخصيص برنامج DataGridView الخاص به كـ XML في ذاكرته. كيف يمكنني أن أتسبب في حدوث نفس الشيء من برنامجي؟ (إنها ليست datagridview ، يسمى عنصر التحكم infragistics.win.ultrawingrid.ultragrid)

قصه كامله:

أنا أستخدم ManagedSpy (http://msdn.microsoft.com/en-us/magazine/cc163617.aspx) للتجسس على برنامج سنشير إليه باسم DataProgram. يرجى الرجوع إلى الشكل 2 في تلك الصفحة للحصول على لقطة شاشة من ManagedSpy.

يحتوي DataProgram على dataGridView-ish مليء بالمعلومات التي أحتاجها. كما أن لديه خيار لتصدير هذه المعلومات إلى ملف Excel. أفضل خيار تصديره إلى CSV في الحافظة الخاصة بي.

عندما أسير عبر عناصر التحكم في DataProgram على TreeView من ManagedSpy ، يمكنني العثور على بيانات DataGridView الدقيقة التي أحتاج إليها. أعلم أنه الصحيح لأنه يمكنني النقر بزر الماوس الأيمن فوقه واختيار "إظهار نافذة" وسيومض مربعًا حول عنصر التحكم.

إليكم الجزء الغريب: مباشرة عندما انقر فوقه ينقر فوقه لعرض خصائصه على الجانب الأيمن من نافذة ManagedSpy ، يحدث شيء سحري. يتم تخصيص الجدول بأكمله داخل ذاكرة DataProgram كـ XML ، بحيث بمساعدة ماسح ضوئي للذاكرة ، أستطيع أن أرى أن الجدول بأكمله موجود أمام عيني ... ثم يأخذها جامع القمامة بعيدًا. لكنه موجود لبعض 30 ثانية جيدة أو نحو ذلك (بالطبع يختلف ، مع كون GC غير محدد). بالمناسبة ، فئة التحكم هي infragistics.win.ultrawingrid.ultragrid ، وهي مثل datagridview معززة (أتصور).

إليك سؤالي: كما ترون ، أريد قراءة ذاكرة DataProgram في النقطة الدقيقة ، يحتوي على جدول XML المخصص. أعرف كيفية قراءة الذاكرة بالفعل (باستخدام ReadProcessMemory). أود أن أتعلم كيف يمكنني تشغيل DataProgram لتخصيص جدول XML من برنامجي تمامًا كما يفعل ManagedSpy. ضع في اعتبارك أن الكود المصدري الخاص بـ ManagedSpy متاح من موقع الويب ، لكنني غير قادر على تصحيحه لأنه يعمل فقط كمسؤول ولسبب ما لا يمكنني تشغيله. أنا فقط بحاجة إلى معرفة كيف يمكنني ، من برنامجي ، إثارة بيانات البيانات لإنشاء معلومات XML حتى أتمكن من قراءتها من ذاكرتها.

هل كانت مفيدة؟

المحلول

عن طريق النسخ على وظيفة refreshwindows () والأحداث treewindow_afterselect و treewindow_beforeexpand ، إضافة treeview و propertygrid ، والرجوع إلى managedspylib.dll ثم كتابة بعض التعليمات البرمجية للمشي treeview واختر العقدة الصحي .

من الواضح أن الطريقة التي تعمل بها ManagedSpylib أكثر تعقيدًا ، فقد فكرت (بشكل أساسي لأنه في C ++ ، LOL) ، لكن مقالة MSDN تقول أن الشيء نفسه يمكن تحقيقه باستخدام DLL عادي مشفر في التعليمات البرمجية غير المُدارة (مثل x86asm). سأحاول القيام بذلك لاحقًا لأن هذه المكتبة حاليًا تعمل أكثر مما أحتاجه (تتبع الأحداث وما إلى ذلك).

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