سؤال

في بيرل، إذا كان لدي HWND من كائن نافذة، كيف يمكنني الوصول إلى كائن COM هذا باستخدام هذا المقبض؟ نظرت إلى Win32 :: OLE ولكن الأقرب الذي حصلت عليه كان GetActiveObject الطريقة، التي تتوقع فئة.

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

المحلول

لا توجد طريقة قياسية للحصول على مؤشر واجهة COM من HWND، لأن النافذة ليست كائن COM. يعمل Windows API الأساسية، بما في ذلك مقابض النافذة، اختراع OLE و COM. قد يعرض تنفيذ نافذة معينة بعض أو كل وظائفه من خلال واجهات COM، لكن هذه الواجهات ستكون خاصة بالتطبيق.

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

نصائح أخرى

احصل على موقع HWND أو موقع من كائن يمكن الوصول إليه ومعالجته باستخدام Windows API:

use Win32::GuiTest;

استخدام hwnd.

my $hwnd = $ao->WindowFromAccessibleObject();
my $name = Win32::GuiTest::GetWindowText($hwnd);

إذا كنت تبحث للحصول على واجهة IACCussible من HWND، يمكنك محاولة استخدام wm_getobject. (ملاحظة: أفترض أن هناك على حد ما لإرسال رسائل النافذة في بيرل، كما أنه لم يكن لدي معرفة بيرل).

ليس الجميع يفعل ذلك بهذه الطريقة، لذلك تأكد من التعامل مع الفشل بطريقة أو بأخرى. على سبيل المثال، تعرض Internet Explorer wm_html_getobject. للحصول على مؤشر ihtmldocument2.

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