في كثير من الأحيان ، نأمل في تنفيذ الاختبارات التلقائية ، وظائف التوضيح التلقائي ، أو تطبيقات التحكم في الماوس ولوحة المفاتيح الأخرى (مثل مساعدة الأشخاص على النقر على الإعلانات لتحقيق الأرباح ، وما إلى ذلك). لهذا الغرض ، منذ JDK1.3 ، قدم لنا روبوتًا يولد أحداث الإدخال الأصلية - java.awt.robot.
أدناه سأقدم وظائف الروبوت وأمثلة التطبيق بالتفصيل:
1. وظائف الروبوت الرئيسية
1.
ملاحظة: توفر هذه الطريقة وظيفة مشابهة لمفتاح PrintScreen على لوحة المفاتيح ، ونسخ وحدات البكسل في المنطقة المستطيلة المحددة لإنشاء محيط مخزن مؤقت.
التطبيق: يمكننا استخدام هذه الطريقة في برنامج الرسومات ، أو استخدامها لتحقيق نقل الشاشة عن بُعد ، والتي يمكن تحويلها إلى برنامج مراقبة الكمبيوتر عن بُعد ، إلخ.
2. تأخير باطل (INT MS)
الوصف: يستخدم للنوم البرنامج الحالي (موضوع) لعدة ميلي ثانية (MS).
التطبيق: يمكن استخدامه للتحكم في تأخير البرنامج. هذا ضروري بشكل عام لأنك بالتأكيد سيكون لديك تأخير في العمليتين الفاصلين.
3. اللون getPixelColor (int x ، int y)
الوصف: احصل على قيمة لون موضع البكسل لإحداثيات الشاشة المحددة.
التطبيق: فقط خذ قيمة RGB Color ، لذلك لن أقول الكثير.
4. مفتاحي الباطل (رمز المفاتيح int)
void keyrelease (int keycode)
ملاحظة: يمكنك رؤية وظائف هاتين الطريقتين في لمحة. تعتبر إجراءات الصحافة ورفع المفتاح المستخدمة لإنشاء المفتاح المحدد معادلة وظيفة keyb_event من واجهة برمجة تطبيقات Win32 ، أي لمحاكاة عمليات لوحة المفاتيح. قيم رمز المفاتيح المحددة هي keyevent.vk_c ، keyevent.vk_d ، keyevent.vk_control ، إلخ. عند تطبيق التطبيق المحدد ، ستعرفه من خلال النظر إلى موجه Eclipse.
التطبيق: يمكن استخدامه للتظاهر التلقائي ، والاختبار ، وما إلى ذلك من البرامج ، وهو أمر مفيد للغاية.
5. باطل mousemove (int x ، int y)
الوصف: انقل مؤشر الماوس إلى إحداثيات الشاشة المحددة.
التطبيق: يمكن استخدامه للتظاهر التلقائي ، والاختبار ، وما إلى ذلك من البرنامج ، ولا غنى عن الاستخدام مع طرق أخرى.
6. باطل mousepress (أزرار int)
void mouserelease (أزرار int)
void mousewheel (int wheelamt)
ملاحظة: تقوم الطرق الثلاث المذكورة أعلاه بإنشاء حركة عجلة الصحافة والرفع والتمرير لزر الماوس المحدد ، والذي يحاكي عملية الماوس. تتضمن قيم الأزرار المحددة inputevent.button1_mask (زر الماوس الأيسر) ، inputevent.button3_mask (زر الماوس الأيمن ، إذا كان الماوس مزدوج المفتاح ، يرجى استخدام inputevent.button2_mask بدلاً من ذلك).
التطبيق: يمكن أيضًا استخدامه للتظاهر التلقائي ، والاختبار ، وما إلى ذلك من البرنامج. من المهم جدًا استخدامه بالتزامن مع طرق أخرى.
2. أمثلة التطبيق
لقد كتبت مثالين على تطبيق صغير نسبيًا ، أحدهما اختبار محاكاة بسيط ، والآخر هو النقر تلقائيًا على الإعلانات لتحقيق أرباح. فيما يلي مظاهرات.
أولا اكتب بعض الطرق الشائعة المشتركة. جافا
حزمة com.alexa ؛ استيراد java.awt.Rectangle ؛ استيراد java.awt.robot ؛ استيراد java.awt.toolkit ؛ استيراد java.awt.event.inputevent ؛ استيراد java.awt.event.keyevent ؛ استيراد java.awt.image.bufferedImage ؛ استيراد javax.swing.icon ؛ استيراد javax.swing.imageicon ؛ /** * Description Robot Class لتنفيذ الوظائف الأساسية * Author Alexia * date 2013/5/18 * */الفئة العامة المشتركة {/** ClickLmouse (Robot R ، Int X ، Int Y ، Int Delay) {R.Mousemove (x ، y) ؛ r.mousepress (inputevent.button1_mask) ؛ R.Delay (10) ؛ r.mouserelease (inputevent.button1_mask) ؛ R.Delay (تأخير) ؛ } / ** * انقر بزر الماوس الأيمن ، وإذا كنت ترغب في النقر المزدوج ، اتصل بشكل مستمر * * param r * param x * x موضع التنسيق * param y * y موضع التنسيق * param تأخير بعد هذه العملية * / public static void clickrmouse (robot r ، int y ، int y ، int) r.mousepress (inputevent.button3_mask) ؛ R.Delay (10) ؛ r.mouserelease (inputevent.button3_mask) ؛ R.Delay (تأخير) ؛ } / ** * إدخال لوحة المفاتيح (يمكن إدخال حرف واحد فقط في وقت واحد) * * param r * param ks * مجموعة من الأحرف التي تم إدخالها بواسطة لوحة المفاتيح * param تأخير * وقت التأخير بعد إدخال مفتاح * / public static static presskeys (robot r ، int [] ks ، int) {int i = 0 ؛ R.Delay (10) ؛ R.KeyRelease (KS [i]) ؛ R.Delay (تأخير) ؛ }} / ** * copy * * param r * throws interruptedException * / void docopy (Robot r) interruptedException {thread.sleep (3000) ؛ R.SetAutodelay (200) ؛ R.Keypress (keyevent.vk_control) ؛ R.Keypress (keyevent.vk_c) ؛ R.KeyRelease (keyevent.vk_control) ؛ R.KeyRelease (keyevent.vk_c) ؛ } / ** * paste * * param r * athrows interruptedException * / void doparse (robot r) رميات interruptedException {r.setautodelay (500) ؛ thread.sleep (2000) ؛ R.Mousemove (300 ، 300) ؛ r.mousepress (inputevent.button1_mask) ؛ r.mouserelease (inputevent.button1_mask) ؛ R.Keypress (keyevent.vk_control) ؛ R.Keypress (keyevent.vk_v) ؛ R.KeyRelease (keyevent.vk_control) ؛ R.KeyRelease (keyevent.vk_v) ؛ } / ** * capture screen moo * * param r * regurn * / icon public capturefullScreen (robot r) {bufferedImage fullscreenimage = r.createscreencapture (new strenge (toolkit.getDefaultToolkit (). getScreensize ())) ؛ ImageIcon icon = new ImageIcon (fullscreenimage) ؛ أيقونة العودة ؛ } / ** * التقاط منطقة تقويم العظام من الشاشة * * param r * param x * x وضع الإحداثيات * param y * y موضع التنسيق * param width * عرض المستطيل * param height * height of the Rectangle * / return * / public icon capturepartscreen (Robot r ، int bufferedImage fullscreenimage = r.createscreencapture (مستطيل جديد (العرض ، الارتفاع)) ؛ ImageIcon icon = new ImageIcon (fullscreenimage) ؛ أيقونة العودة ؛ }}قبل المثال ، يرجى الانتباه إلى كيفية تحديد موضع الإحداثيات للشاشة. قمت بتنزيل أداة ، وهي مريحة للغاية للاستخدام. يوصى باستخدامه.
1. اختبار وهمية بسيط
حزمة com.alexia ؛ استيراد java.awt.*؛ استيراد java.awt.event.*؛ استيراد javax.swing.joptionpane ؛ الفئة العامة SimpleTest {public static void main (string [] args) يلقي الاستثناء {Final Robot RB = New Robot () ؛ new Thread () {public void run () {rb.delay (2000) ؛ // Simulate Carriage Return rb.keypress (keyevent.vk_enter) ؛ RB.KeyRelease (keyevent.vk_enter) ؛ } }.يبدأ()؛ RB.Delay (3000) ؛ // اضبط الموضع التقريبي لقائمة البدء int x = 40 ؛ int y = toolkit.getDefaultToolkit (). getScreensize (). الارتفاع - 10 ؛ // انقل الماوس إلى قائمة البدء ، rb.mousemove (x ، y) ؛ RB.Delay (500) ؛ // انقر فوق قائمة البدء common.clicklmouse (RB ، X ، Y ، 500) ؛ RB.Delay (1000) ؛ // قم بتشغيل أمر cmd cmd enter int [] ks = {keyevent.vk_c ، keyevent.vk_m ، keyevent.vk_d ، keyevent.vk_enter ،} ؛ Common.PressKeys (RB ، KS ، 500) ؛ RB.Mousemove (400 ، 400) ؛ RB.Delay (500) ؛ // قم بتشغيل أمر dir dir inter ks = new int [] {keyevent.vk_d ، keyevent.vk_i ، keyevent.vk_r ، keyevent.vk_enter} ؛ Common.PressKeys (RB ، KS ، 500) ؛ RB.Delay (1000) ؛ // قم بتشغيل cls cls cls أدخل ks = new int [] {keyevent.vk_c ، keyevent.vk_l ، keyevent.vk_s ، keyevent.vk_enter} ؛ Common.PressKeys (RB ، KS ، 500) ؛ RB.Delay (1000) ؛ // قم بتشغيل خروج Complet Exit Enter ks = new int [] {keyevent.vk_e ، keyevent.vk_x ، keyevent.vk_i ، keyevent.vk_t ، keyevent.vk_enter} ؛ Common.PressKeys (RB ، KS ، 500) ؛ RB.Delay (1000) ؛ // انقر بزر الماوس الأيمن لاختبار x = toolkit.getDefaultToolkit (). getScreensize (). العرض - 50 ؛ common.clickrmouse (rb ، x ، y ، 500) ؛ new Thread () {public void run () {rb.delay (1000) ؛ // Enter RB.Keypress (keyevent.vk_enter) ؛ RB.KeyRelease (keyevent.vk_enter) ؛ } }.يبدأ()؛ joptionpane.showmessagedialog (NULL ، "Demo قد انتهى!") ؛ }} 2. انقر على إعلان Netease لكسب ربح ضئيل
حزمة com.alexia ؛ استيراد java.awt.awtexception ؛ استيراد java.awt.desktop ؛ استيراد java.awt.robot ؛ استيراد java.awt.event.keyevent ؛ استيراد java.io.ioException ؛ استيراد java.net.uri ؛ استيراد java.util.random ؛ الطبقة العامة Autoclickads {بروبوت الروبوت الخاص ؛ توقف منطقي متقلبة خاصة = خطأ ؛ / ** ينشئ مثيلًا جديدًا لـ Main*/ Autoclickads () {try {robot = new robot () ؛ } catch (awtexception ex) {ex.printStackTrace () ؛ }} public void init () {robot.delay (3000) ؛ System.out.println ("انقر فوق إعلانات البدء") ؛ // افتح عنوان URL المحدد في نافذة متصفح جديدة أو نافذة متصفح موجودة (JDK 1.6 أو فوق) سطح المكتب سطح المكتب = Desktop.getDesktop () ؛ if (desktop.isdesktopsupported () && desktop.issupported (desktop.action.browse)) {uri uri = uri.create ("http://lanxuezaipiao.blog.163.com/") ؛ حاول {desktop.browse (uri) ؛ } catch (ioException e) {// todo acto catch block e.printstacktrace () ؛ }} حاول {run () ؛ } catch (interruptedException e) {// todo catch catch e.printstacktrace () ؛ } قف()؛ System.out.println ("انقر فوق إعلانات توقف") ؛ } public void run () remrows interruptedException {int count = 1 ؛ بينما (! توقف) {robot.delay (8000) ؛ int x = 576 ؛ int y = 567 ؛ عشوائي R = جديد عشوائي () ؛ common.clicklmouse (Robot ، X ، Y ، 3000) ؛ // أدخل السهم لأسفل لتحقيق الصفحة int [] ks = {keyevent.vk_down} ؛ لـ (int i = 0 ؛ i <10 ؛ i ++) common.presskeys (robot ، ks ، 0) ؛ int [] [] a = {{500 ، 103} ، {500 ، 163} ، {500 ، 223} ، {500 ، 283} ، {500 ، 343} ، {500 ، 403} ، {500 ، 463} ، {500 ، 523} ، {500 ، 583} ، int b = r.nextint (5) ؛ x = a [b] [0] ؛ y = a [b] [1] ؛ common.clicklmouse (روبوت ، x ، y ، 1000) ؛ // أدخل السهم لأسفل لتحقيق بدوره في (int i = 0 ؛ i <500 ؛ i ++) شائع. // أدخل السهم لأسفل لتحقيق الصفحة int [] kups = {keyevent.vk_up} ؛ لـ (int i = 0 ؛ i <3 ؛ i ++) common.presskeys (robot ، kups ، 0) ؛ x = 900 ؛ y = 210 ؛ common.clicklmouse (Robot ، X ، Y ، 3000) ؛ x = 1090 ؛ y = 15 ؛ common.clicklmouse (Robot ، X ، Y ، 3000) ؛ x = 900 ؛ y = 135 ؛ common.clicklmouse (Robot ، X ، Y ، 3000) ؛ System.out.println ("النقر بنجاح" + count + "إعلانات!") ؛ }} stop void stop () {stop = true ؛ } / ** * * @param args وسيطات سطر الأوامر * * throws interruptedException * / public static void main (string [] args) interruptedException {autoclickads mc = new AutoClickads () ؛ mc.init () ؛ }}ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.