หลายครั้งที่เราหวังว่าจะใช้การทดสอบอัตโนมัติฟังก์ชั่นการสาธิตอัตโนมัติหรือแอปพลิเคชั่นควบคุมเมาส์และคีย์บอร์ดอื่น ๆ (เช่นช่วยให้ผู้คนคลิกโฆษณาเพื่อทำกำไร ฯลฯ ) เพื่อจุดประสงค์นี้ตั้งแต่ JDK1.3 มันได้ให้หุ่นยนต์ที่สร้างเหตุการณ์อินพุตดั้งเดิม - java.awt.robot
ด้านล่างนี้ฉันจะแนะนำฟังก์ชั่นของหุ่นยนต์และตัวอย่างแอปพลิเคชันโดยละเอียด:
1. ฟังก์ชั่นหลักของหุ่นยนต์
1. bufferedImage createscreencapture (หน้าจอสี่เหลี่ยมผืนผ้า)
หมายเหตุ: วิธีนี้มีฟังก์ชั่นที่คล้ายกับปุ่ม PrintScreen บนแป้นพิมพ์คัดลอกพิกเซลหน้าจอในพื้นที่สี่เหลี่ยมที่ระบุเพื่อสร้าง bufferedImage
แอปพลิเคชัน: เราสามารถใช้วิธีนี้ในโปรแกรมกราฟิกหรือใช้เพื่อรับรู้การส่งหน้าจอระยะไกลซึ่งสามารถทำในโปรแกรมการตรวจสอบคอมพิวเตอร์ระยะไกล ฯลฯ
2. โมฆะล่าช้า (int ms)
คำอธิบาย: ใช้ในการนอนหลับโปรแกรมปัจจุบัน (เธรด) เป็นเวลาหลายมิลลิวินาที (MS)
แอปพลิเคชัน: สามารถใช้เพื่อควบคุมความล่าช้าของโปรแกรม โดยทั่วไปจำเป็นเพราะคุณจะมีความล่าช้าในการดำเนินการสองช่วงเวลาอย่างแน่นอน
3. สี getPixelColor (int x, int y)
คำอธิบาย: รับค่าสีของตำแหน่งพิกเซลของพิกัดหน้าจอที่กำหนด
แอปพลิเคชัน: เพียงแค่ใช้ค่าสี RGB ดังนั้นฉันจะไม่พูดอะไรมาก
4. void keypress (ปุ่ม int)
เป็นโมฆะ KeyrElease (ปุ่ม Int)
หมายเหตุ: คุณสามารถดูฟังก์ชั่นของทั้งสองวิธีนี้ได้อย่างรวดเร็ว การกดปุ่มและการดำเนินการยกที่ใช้ในการสร้างคีย์ที่ระบุนั้นเทียบเท่ากับฟังก์ชั่น keyb_event ของ Win32 API นั่นคือเพื่อจำลองการดำเนินการแป้นพิมพ์ ค่าปุ่มกดเฉพาะคือ keyeVent.vk_c, keyeVent.vk_d, keyeVent.vk_control ฯลฯ เมื่อใช้แอปพลิเคชันเฉพาะคุณจะรู้โดยดูที่พรอมต์ Eclipse
แอปพลิเคชัน: สามารถใช้สำหรับการสาธิตอัตโนมัติการทดสอบ ฯลฯ ของโปรแกรมซึ่งมีประโยชน์มาก
5. โมฆะ mousemove (int x, int y)
คำอธิบาย: เลื่อนเคอร์เซอร์เมาส์ไปยังพิกัดหน้าจอที่ระบุ
แอปพลิเคชัน: สามารถใช้สำหรับการสาธิตอัตโนมัติการทดสอบ ฯลฯ ของโปรแกรมและขาดไม่ได้สำหรับใช้กับวิธีอื่น
6. โมฆะ mousepress (ปุ่ม int)
โมฆะ mouserelease (ปุ่ม int)
เป็นโมฆะ Mousewheel (Int Wheelamt)
หมายเหตุ: สามวิธีข้างต้นสร้างการกด, ยกและการเคลื่อนไหวของล้อเลื่อนของปุ่มเมาส์ที่ระบุซึ่งจำลองการทำงานของเมาส์ ค่าปุ่มที่เฉพาะเจาะจงรวมถึง inputeVent.button1_mask (ปุ่มซ้ายเมาส์), inputeVent.Button3_Mask (ปุ่มเมาส์ขวาถ้าเป็นเมาส์คู่คีย์โปรดใช้ inputeVent.button2_mask แทน)
แอปพลิเคชัน: มันยังสามารถใช้สำหรับการสาธิตอัตโนมัติการทดสอบ ฯลฯ ของโปรแกรม มันสำคัญมากที่จะใช้ร่วมกับวิธีอื่น ๆ
2. ตัวอย่างแอปพลิเคชัน
ฉันได้เขียนตัวอย่างแอปพลิเคชันที่ค่อนข้างเล็กสองตัวอย่างหนึ่งคือการทดสอบการจำลองแบบง่าย ๆ และอีกตัวอย่างหนึ่งคือคลิกที่โฆษณาโดยอัตโนมัติเพื่อสร้างผลกำไร ต่อไปนี้เป็นการสาธิต
ก่อนอื่นเขียนวิธีการทั่วไปบางอย่าง Common.java
แพ็คเกจ 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 หุ่นยนต์คลาสช่วยในการใช้ฟังก์ชั่นพื้นฐาน * @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 ล่าช้า * เวลาหน่วงเวลาหลังจากการดำเนินการนี้ R.MousePress (inputeVent.Button3_Mask); R.Delay (10); R.MouserElease (inputeVent.Button3_Mask); R.Delay (ล่าช้า); } / ** * อินพุตแป้นพิมพ์ (สามารถป้อนอักขระเดียวได้ในแต่ละครั้ง) * * @param r * @param ks * อาร์เรย์ของตัวละครที่ป้อนโดยแป้นพิมพ์ * @param การหน่วงเวลา * เวลาหน่วงเวลาหลังจากเข้าสู่คีย์ * / โมฆะสาธารณะแบบคงที่ (Robot R, int [] ks, int ล่าช้า) {สำหรับ (int i = 0; R.Delay (10); r.keylease (ks [i]); R.Delay (ล่าช้า); }} / ** * คัดลอก * * @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); } / ** * วาง * * @param r * @throws 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); } / ** * จับภาพเต็มหน้าจอ moo * * @param r * @return * / ไอคอนสาธารณะ Capturefullscreen (หุ่นยนต์ R) {bufferedImage fullscreenimage = r.createscreencapture (รูปสี่เหลี่ยมผืนผ้าใหม่ ไอคอน ImageIcon = ใหม่ ImageIcon (Fullscreenimage); ไอคอนคืน; } / ** * จับภาพพื้นที่กระดูกและข้อของหน้าจอ * * @param r * @param x * x ตำแหน่งพิกัด * @param y * y ตำแหน่งพิกัด * @param ความกว้าง * ความกว้างของสี่เหลี่ยมผืนผ้า * @param ความสูง * ความสูงของรูปสี่เหลี่ยมผืนผ้า bufferedImage fullscreenimage = r.createscreencapture (สี่เหลี่ยมผืนผ้าใหม่ (ความกว้าง, ความสูง)); ไอคอน ImageIcon = ใหม่ ImageIcon (Fullscreenimage); ไอคอนคืน; -ก่อนตัวอย่างโปรดให้ความสนใจกับวิธีการกำหนดตำแหน่งพิกัดของหน้าจอ ฉันดาวน์โหลดแกดเจ็ตซึ่งสะดวกมากในการใช้งาน ขอแนะนำให้คุณใช้
1. การทดสอบจำลองอย่างง่าย
แพ็คเกจ com.alexia; นำเข้า Java.awt.*; นำเข้า java.awt.event.*; นำเข้า Javax.swing.joptionpane; คลาสสาธารณะที่ง่ายที่สุด {โมฆะสาธารณะคงที่หลัก (สตริง [] args) โยนข้อยกเว้น {หุ่นยนต์สุดท้าย RB = ใหม่หุ่นยนต์ (); เธรดใหม่ () {โมฆะสาธารณะเรียกใช้ () {rb.delay (2000); // จำลองการขนส่งคืน 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 (1,000); // เรียกใช้คำสั่ง cmd cmd ป้อน 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 ป้อน ks = int ใหม่ [] {keyevent.vk_d, keyevent.vk_i, keyeVent.vk_r, keyeVent.vk_enter}; Common.presskeys (RB, KS, 500); RB.Delay (1,000); // เรียกใช้คำสั่ง cls cls ป้อน ks = new int [] {keyevent.vk_c, keyevent.vk_l, keyeVent.vk_s, keyeVent.vk_enter}; Common.presskeys (RB, KS, 500); RB.Delay (1,000); // เรียกใช้คำสั่ง EXIT EXIT Enter KS = ใหม่ int [] {keyEvent.vk_e, keyeVent.vk_x, keyeVent.vk_i, keyeVent.vk_t, keyeVent.vk_enter}; Common.presskeys (RB, KS, 500); RB.Delay (1,000); // คลิกขวาเพื่อทดสอบ x = toolkit.getdefaulttoolkit (). getScreensize (). ความกว้าง - 50; Common.ClickrMouse (RB, X, Y, 500); เธรดใหม่ () {โมฆะสาธารณะเรียกใช้ () {rb.delay (1,000); // ป้อน rb.keypress (keyevent.vk_enter); rb.keyrelease (keyevent.vk_enter); } }.เริ่ม(); joptionpane.showmessagedialog (null, "การสาธิตจบลงแล้ว!"); - 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*/ Public Autoclickads () {ลอง {Robot = ใหม่ Robot (); } catch (awtexception ex) {ex.printstacktrace (); }} โมฆะสาธารณะ 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 บล็อก catch block ที่สร้างอัตโนมัติ e.printstacktrace (); }} ลอง {run (); } catch (interruptedException e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); } หยุด(); System.out.println ("คลิกโฆษณาหยุด"); } public void run () พ่น 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 int b = r.nextint (5); x = a [b] [0]; y = a [b] [1]; Common.ClicklMouse (Robot, X, Y, 1000); // ป้อนลูกศรลงเพื่อให้ได้เปิดหน้าสำหรับ (int i = 0; i <500; i ++) Common.presskeys (Robot, Ks, 0); // ป้อนลูกศรลงเพื่อให้ได้การเปิดหน้า int [] kups = {keyeVent.vk_up}; สำหรับ (int i = 0; i <3; i ++) Common.presskeys (หุ่นยนต์, 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 = true; } / ** * * @param args อาร์กิวเมนต์บรรทัดคำสั่ง * * @throws interruptedException * / โมฆะคงที่สาธารณะหลัก (สตริง [] args) พ่น InterruptedException {Autoclickads MC = ใหม่ autoclickads (); mc.init (); -ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น