From b77e280343f0beecfa9b62c8999d95adc4e80732 Mon Sep 17 00:00:00 2001 From: Rik Veenboer Date: Sun, 20 Feb 2011 12:36:53 +0000 Subject: [PATCH] Talrijke aanpassingen gemaakt. Vorige commit gaf een fout en ik heb geen zin om informatie opnieuw te typen. --- java/.classpath | 3 +- java/native/NativeCall.dll | Bin 7680 -> 0 bytes .../com/dt/iTunesController/ITPlaylist.java | 16 +- java/src/com/dt/iTunesController/iTunes.java | 7 + .../javazoom/jlgui/player/amp/PlayerUI.java | 18 +- .../javazoom/jlgui/player/amp/skin/Skin.java | 14 +- java/src/pm/Action.java | 2 +- java/src/pm/Application.java | 3 +- java/src/pm/Device.java | 1 - java/src/pm/Main.java | 13 +- .../application/iTunes/iTunesApplication.java | 6 +- java/src/pm/application/windows/Command.java | 68 +++++++ .../pm/application/windows/VirtualKey.java | 181 ++++++++++++++++++ .../windows/WindowsApplication.java | 106 ++++++++++ .../gomplayer/GomPlayerApplication.java | 66 +++++++ .../windows/wmp/WMPApplication.java | 40 ++++ .../jintellitype/JIntellitypeDevice.java | 5 +- java/src/pm/device/player/PlayerDevice.java | 22 +++ java/src/pm/device/wiimote/WiimoteDevice.java | 37 +++- .../windows/SendCommandException.java | 5 + .../application/windows/SendKeyException.java | 5 + .../windows/WindowsApplicationException.java | 7 + java/src/pm/task/TaskGatherer.java | 55 +++--- java/src/pm/task/TaskListener.java | 7 +- java/src/pm/util/Native.java | 25 +++ java/src/pm/util/VBScript.java | 52 +++++ 26 files changed, 704 insertions(+), 60 deletions(-) delete mode 100644 java/native/NativeCall.dll create mode 100644 java/src/pm/application/windows/Command.java create mode 100644 java/src/pm/application/windows/VirtualKey.java create mode 100644 java/src/pm/application/windows/WindowsApplication.java create mode 100644 java/src/pm/application/windows/gomplayer/GomPlayerApplication.java create mode 100644 java/src/pm/application/windows/wmp/WMPApplication.java create mode 100644 java/src/pm/device/player/PlayerDevice.java create mode 100644 java/src/pm/exception/application/windows/SendCommandException.java create mode 100644 java/src/pm/exception/application/windows/SendKeyException.java create mode 100644 java/src/pm/exception/application/windows/WindowsApplicationException.java create mode 100644 java/src/pm/util/Native.java create mode 100644 java/src/pm/util/VBScript.java diff --git a/java/.classpath b/java/.classpath index 3a15169..6ff526b 100644 --- a/java/.classpath +++ b/java/.classpath @@ -6,8 +6,9 @@ - + + diff --git a/java/native/NativeCall.dll b/java/native/NativeCall.dll deleted file mode 100644 index 6e2cad120371488b6f94c2cc7d2a953a4a8db09f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7680 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 taskListenerList; protected static ApplicationCycle applicationCycle; - + public static void initialise(ApplicationCycle applicationCycle) { taskListenerList = new ArrayList(); TaskGatherer.applicationCycle = applicationCycle; } - public static void add(Application application) { - add(application); - applicationCycle.add(application); + public static void add(TaskListener taskListener) { + taskListenerList.add(taskListener); } - - public static void add(TaskListener taskListner) { - taskListenerList.add(taskListner); - } - + public static void add(Task task) { if (task instanceof Stopper) { Stopper stopper = (Stopper) task; stopper.stop(); } else { Target target = task.getTarget(); - for (TaskListener taskListener : taskListenerList) { - switch (target) { - case ALL: - taskListener.add(task); - case MAIN: - if (taskListener instanceof Main) { + if (target.equals(Target.APPLICATION)) { + applicationCycle.current().add(task); + } else { + for (TaskListener taskListener : taskListenerList) { + switch (target) { + case ALL: taskListener.add(task); - } - break; - case DEVICES: - if (taskListener instanceof Device) { - taskListener.add(task); - } - break; - case APPLICATIONS: - if (taskListener instanceof Application) { - taskListener.add(task); - } - break; - case APPLICATION: - applicationCycle.current().add(task); + case MAIN: + if (taskListener instanceof Main) { + taskListener.add(task); + } + break; + case DEVICES: + if (taskListener instanceof Device) { + taskListener.add(task); + } + break; + case APPLICATIONS: + if (taskListener instanceof Application) { + taskListener.add(task); + } + break; + } } } } diff --git a/java/src/pm/task/TaskListener.java b/java/src/pm/task/TaskListener.java index 6ef03c9..92db8e3 100644 --- a/java/src/pm/task/TaskListener.java +++ b/java/src/pm/task/TaskListener.java @@ -25,7 +25,7 @@ public abstract class TaskListener implements Runnable { run = true; while (run) { if (taskQueue.isEmpty()) { - sleep(SLEEP); + sleep(); } else { task(taskQueue.poll()); } @@ -48,7 +48,12 @@ public abstract class TaskListener implements Runnable { } catch (InterruptedException e) {} } + protected void sleep() { + sleep(SLEEP); + } + protected void task(Task task) { + System.out.println(this); Action action = task.getAction(); if (task instanceof Continuous) { Continuous continuous = (Continuous) task; diff --git a/java/src/pm/util/Native.java b/java/src/pm/util/Native.java new file mode 100644 index 0000000..fc8a54e --- /dev/null +++ b/java/src/pm/util/Native.java @@ -0,0 +1,25 @@ +package pm.util; + +import java.io.File; +import java.io.IOException; +import java.util.InputMismatchException; +import java.util.Scanner; + +public class Native { + public static int getHandle(String name) throws IOException { + File file = new File("native/list.exe"); + Process process = Runtime.getRuntime().exec(file.getPath()); + Scanner scanner = new Scanner(process.getInputStream()); + while (scanner.hasNextLine()) { + try { + int handle = new Integer(scanner.nextLine()); + String title = scanner.nextLine(); + if (title.contains(name)) { + System.out.println("Window (" + handle + "): \"" + title + "\""); + return handle; + } + } catch (InputMismatchException e) {} + } + return -1; + } +} diff --git a/java/src/pm/util/VBScript.java b/java/src/pm/util/VBScript.java new file mode 100644 index 0000000..69576e8 --- /dev/null +++ b/java/src/pm/util/VBScript.java @@ -0,0 +1,52 @@ +package pm.util; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStreamReader; + +public class VBScript { + public static boolean isRunning(String program) throws IOException { + boolean found = false; + File file = File.createTempFile("vbsutils", ".vbs"); + file.deleteOnExit(); + FileWriter fileWriter = new FileWriter(file); + fileWriter.write(String.format( + "Set WshShell = WScript.CreateObject(\"WScript.Shell\")\n" + + "Set locator = CreateObject(\"WbemScripting.SWbemLocator\")\n" + + "Set service = locator.ConnectServer()\n" + + "Set processes = service.ExecQuery _\n" + + " (\"select * from Win32_Process where name='%s'\")\n" + + "For Each process in processes\n" + + "wscript.echo process.Name \n" + + "Next\n" + + "Set WSHShell = Nothing\n", program)); + fileWriter.close(); + Process process = Runtime.getRuntime().exec("cscript //NoLogo " + file.getPath()); + InputStreamReader inputStreamReader = new InputStreamReader(process.getInputStream()); + BufferedReader input = new BufferedReader(inputStreamReader); + String line = input.readLine(); + found = line != null && line.equals(program); + input.close(); + return found; + } + + public static void terminate(String program) throws IOException { + File file = File.createTempFile("vbsutils", ".vbs"); + file.deleteOnExit(); + FileWriter fileWriter = new FileWriter(file); + fileWriter.write(String.format( + "Set WshShell = WScript.CreateObject(\"WScript.Shell\")\n" + + "Set locator = CreateObject(\"WbemScripting.SWbemLocator\")\n" + + "Set service = locator.ConnectServer()\n" + + "Set processes = service.ExecQuery _\n" + + " (\"select * from Win32_Process where name='%s'\")\n" + + "For Each process in processes\n" + + "process.Terminate() \n" + + "Next\n" + + "Set WSHShell = Nothing\n", program)); + fileWriter.close(); + Runtime.getRuntime().exec("cscript //NoLogo " + file.getPath()); + } +}