هل من الممكن إرسال رسالة / نشر رسالة مباشرة إلى htmlelement بدلاً من عنصر تحكم WebBrowser؟
-
27-09-2019 - |
سؤال
أرغب في إرسال مفاتيح إلى عنصر التحكم في متصفح الويب AC# مباشرة ، وليس فقط النافذة مع التركيز الصحيح.
أنا الآن قادر على إرسال مفتاح باستخدام postmessage و documentHandle والتركيز مثل هذا
أي رمز زائف
HtmlElement el = getelement();
el.Focus();
IntPtr docptr = browser.Handle;
PostMessage(docptr,WM_KEYDOWN,1,0);
.... KEYCHAR, KEYUP..
كنت أتساءل عما إذا كان أي شخص يعرف بأي طريقة لتتمكن من القيام بذلك في خلفية ، بحيث لا يكون التركيز على العنصر. في الأساس ، هناك طريقة للحصول على intptr إلى htmlelement نفسها ، بدلاً من استخدام ذلك بدلاً من ذلك في postmessage أو sendkeys API بدلاً من مقبض المتصفح/ptr.
المحلول
لا يمكنك. هذه هي عناصر تحكم بدون نوافذ ، يتم التعامل مع رسائل الماوس/لوحة المفاتيح بواسطة نافذة الأصل ، ورسالة الوالدين الوحيدة للتحكم النشط.
نصائح أخرى
هذه هي الطريقة الخاطئة للذهاب.
يمكنك استخدام ال HtmlElement
API لمعالجة العنصر مباشرة.
للحصول على تعليمات دقيقة ، يرجى إخبارنا بما تحاول القيام به.
إلقاء نظرة على أشياء مثل Waitn و Selenium.
IE لديه أيضا واجهة برمجة جيدة للتحكم في المتصفح.
ولكن هناك سلبيات ...
أنا أعمل حاليًا على برنامج يستخدم التعرف على الصور والتحكم في الماوس/المفاتيح للتحكم في المتصفح حيث لا يمكنني فعل ما أريد إلا مع التمثيل المرئي.
ومع ذلك ، فإن ذلك سيهيمن على الكمبيوتر ويحتاج إلى تحكم كامل. ما لم تقم بتشغيله في جهاز افتراضي.
استغرق الأمر مني وقتًا طويلاً للعثور على هذا ، ولكن عليك أن تستدعي GetWindow مع أمر الطفل للحصول على مقابض Window مرارًا وتكرارًا حتى تصل إلى واحدة تستجيب لـ GetClassName مع "Internet Explorer_server" أو شيء من هذا القبيل.
ثم بعد ذلك على هذا hwnd و activelement من webbrowser سوف يستلمها. تأكد من أن لديك WM_Keyup هناك لأن ذلك يبدو مهمًا.