0
押し続ける:キーは私がするプログラムを作成しようとしています何度
- ライブチャットメッセージが特定のコントロールの場合は、ライブストリーム
- からのライブチャットメッセージを取りプレスとのために、そのキーを保持します2秒
- ライブチャットIDを書き留めて、もう一度キーを押さないでください。
これまで私がこれまで行ってきたことは次のとおりです。プログラムを実行してチャットボックスに値を入力すると、キーを無限に押して停止せず、コンピュータをフリーズします。
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.net.URL;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
class Game {
String[] rawCommands = { "up", "down", "left", "right", "start", "select", "a", "b", "x", "y", "l", "r" };
int[] transCommands = { KeyEvent.VK_A, KeyEvent.VK_B, KeyEvent.VK_C, KeyEvent.VK_D, KeyEvent.VK_E, KeyEvent.VK_F,
KeyEvent.VK_G, KeyEvent.VK_H, KeyEvent.VK_I, KeyEvent.VK_J, KeyEvent.VK_K, KeyEvent.VK_L };
ArrayList<String> seen = new ArrayList<String>();
void main() {
while (true) {
HashMap<Integer, String[]> messages = listChatMessages();
for (int i = 0; i < messages.size(); i++) {
String[] full = messages.get(i);
String id = full[0];
String msg = full[1];
Result r = oneOfManyIgnoreCase(msg, rawCommands);
if (r.bool) {
if (!oneOfManyIgnoreCase(id, seen.toArray(new String[seen.size()])).bool) {
int key = transCommands[Arrays.asList(rawCommands).indexOf(r.msg)];
keyPress(key);
if (seen.size() > 90) {
seen.remove(0);
}
seen.add(id);
}
}
}
}
}
void deleteChatMessage(String id) {
}
HashMap<Integer, String[]> listChatMessages() {
HashMap<Integer, String[]> messages = new HashMap<>();
try {
URL response = new URL("https://www.googleapis.com/youtube/v3/liveChat/m"
+ "essages?liveChatId=EiEKGFVDaUxwMWJTNFpvc2JlaHA5bHppbGNJQRIFL2xpdmU&part=sn"
+ "ippet&key=AIzaSyAYFLriWHDy8MJZ_zblU-GuovOoqg6L-28&maxResults=200&pageToken=GKf04s3c7tcCILjGoM7c7tcC");
ReadableByteChannel rbc = Channels.newChannel(response.openStream());
FileOutputStream fos = new FileOutputStream("messages.json");
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
fos.close();
JSONParser parser = new JSONParser();
Object obj = parser.parse(new FileReader("messages.json"));
JSONObject jObj = (JSONObject) obj;
JSONArray jArr = (JSONArray) jObj.get("items");
for (int i = 0; i < jArr.size(); i++) {
JSONObject msg = (JSONObject) jArr.get(i);
JSONObject snippet = (JSONObject) msg.get("snippet");
JSONObject txtDetails = (JSONObject) snippet.get("textMessageDetails");
String[] full = new String[2];
full[1] = (String) txtDetails.get("messageText");
full[0] = (String) msg.get("id");
messages.put(i, full);
}
} catch (Exception ex) {
ex.printStackTrace();
}
return messages;
}
void keyPress(int key) {
new Thread(new Runnable() {
public void run() {
try {
Robot bot = new Robot();
bot.setAutoDelay(1);
int duration = 3000;
long start = System.currentTimeMillis();
while (System.currentTimeMillis() - start < duration) {
bot.keyPress(key);
bot.keyRelease(key);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}).start();
}
Result oneOfManyIgnoreCase(String one, String[] many) {
Boolean match = false;
String message = "";
for (String man : many) {
if (one.equalsIgnoreCase(man)) {
match = true;
message = man;
break;
}
}
Result r = new Result(match, message);
return r;
}
}
ていないロボットオブジェクトに精通しなく 'ながら(のSystem.currentTimeMillis() - 持続時間<開始){ bot.keyPress(キー)。 bot.keyRelease(key); } '' ''は '' X秒間キーを押し続けるのではなく、X秒間キーを押し続けているように見えます。 – user3298823