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 6e2cad1..0000000
Binary files a/java/native/NativeCall.dll and /dev/null differ
diff --git a/java/src/com/dt/iTunesController/ITPlaylist.java b/java/src/com/dt/iTunesController/ITPlaylist.java
index 23bf2b9..d45dbee 100644
--- a/java/src/com/dt/iTunesController/ITPlaylist.java
+++ b/java/src/com/dt/iTunesController/ITPlaylist.java
@@ -150,5 +150,19 @@ public class ITPlaylist extends ITObject {
Dispatch tracks = Dispatch.get(object, "Tracks").toDispatch();
return new ITTrackCollection(tracks);
}
-
+
+ /**
+ * Returns the shuffle state.
+ * @return true if current state is shuffle.
+ */
+ public boolean getShuffle() {
+ return Dispatch.get(object, "Shuffle").getBoolean();
+ }
+
+ /**
+ * Toggle the shuffle state.
+ */
+ public void toggleShuffle() {
+ setShuffle(!getShuffle());
+ }
}
diff --git a/java/src/com/dt/iTunesController/iTunes.java b/java/src/com/dt/iTunesController/iTunes.java
index 4f1a3ae..24e9e2c 100644
--- a/java/src/com/dt/iTunesController/iTunes.java
+++ b/java/src/com/dt/iTunesController/iTunes.java
@@ -342,6 +342,13 @@ public class iTunes {
setMute(!getMute());
}
+ /**
+ * Toggle the shuffle state.
+ */
+ public void toggleShuffle() {
+ getCurrentPlaylist().toggleShuffle();
+ }
+
/**
* Returns the current player state.
* @return Returns the current player state.
diff --git a/java/src/javazoom/jlgui/player/amp/PlayerUI.java b/java/src/javazoom/jlgui/player/amp/PlayerUI.java
index 9cf9df4..f0ea8d2 100644
--- a/java/src/javazoom/jlgui/player/amp/PlayerUI.java
+++ b/java/src/javazoom/jlgui/player/amp/PlayerUI.java
@@ -332,10 +332,10 @@ public class PlayerUI extends JPanel implements ActionListener, ChangeListener,
ui.getAcExit().removeActionListener(this);
ui.getAcExit().addActionListener(this);
// DSP
- if (ui.getAcAnalyzer() != null)
+ /*if (ui.getAcAnalyzer() != null)
{
add(ui.getAcAnalyzer(), ui.getAcAnalyzer().getConstraints());
- }
+ }*/
// Popup menu
mainpopup = new JPopupMenu(ui.getResource("popup.title"));
JMenuItem mi = new JMenuItem(Skin.TITLETEXT + "- JavaZOOM");
@@ -1173,14 +1173,14 @@ public class PlayerUI extends JPanel implements ActionListener, ChangeListener,
{
lastScrollTime = System.currentTimeMillis();
posValueJump = false;
- if (audioInfo.containsKey("basicplayer.sourcedataline"))
+ /*if (audioInfo.containsKey("basicplayer.sourcedataline"))
{
if (ui.getAcAnalyzer() != null)
{
ui.getAcAnalyzer().setupDSP((SourceDataLine) audioInfo.get("basicplayer.sourcedataline"));
ui.getAcAnalyzer().startDSP((SourceDataLine) audioInfo.get("basicplayer.sourcedataline"));
}
- }
+ }*/
}
else if (state == BasicPlayerEvent.SEEKING)
{
@@ -1207,11 +1207,11 @@ public class PlayerUI extends JPanel implements ActionListener, ChangeListener,
}
else if (state == BasicPlayerEvent.STOPPED)
{
- if (ui.getAcAnalyzer() != null)
+ /*if (ui.getAcAnalyzer() != null)
{
ui.getAcAnalyzer().stopDSP();
ui.getAcAnalyzer().repaint();
- }
+ }*/
}
}
@@ -1236,7 +1236,7 @@ public class PlayerUI extends JPanel implements ActionListener, ChangeListener,
if (audioInfo.containsKey("basicplayer.sourcedataline"))
{
// Spectrum/time analyzer
- if (ui.getAcAnalyzer() != null) ui.getAcAnalyzer().writeDSP(pcmdata);
+ //if (ui.getAcAnalyzer() != null) ui.getAcAnalyzer().writeDSP(pcmdata);
}
if (audioInfo.containsKey("audio.length.bytes"))
{
@@ -1699,12 +1699,12 @@ public class PlayerUI extends JPanel implements ActionListener, ChangeListener,
{
config.setAudioDevice(((BasicPlayer) theSoundPlayer).getMixerName());
}
- if (ui.getAcAnalyzer() != null)
+ /*if (ui.getAcAnalyzer() != null)
{
if (ui.getAcAnalyzer().getDisplayMode() == SpectrumTimeAnalyzer.DISPLAY_MODE_OFF) config.setVisualMode("off");
else if (ui.getAcAnalyzer().getDisplayMode() == SpectrumTimeAnalyzer.DISPLAY_MODE_SCOPE) config.setVisualMode("oscillo");
else config.setVisualMode("spectrum");
- }
+ }*/
if (playlist != null)
{
playlist.save("default.m3u");
diff --git a/java/src/javazoom/jlgui/player/amp/skin/Skin.java b/java/src/javazoom/jlgui/player/amp/skin/Skin.java
index 5575699..acd85fb 100644
--- a/java/src/javazoom/jlgui/player/amp/skin/Skin.java
+++ b/java/src/javazoom/jlgui/player/amp/skin/Skin.java
@@ -40,7 +40,7 @@ import javax.swing.JSlider;
import javazoom.jlgui.player.amp.PlayerActionEvent;
import javazoom.jlgui.player.amp.equalizer.ui.SplinePanel;
import javazoom.jlgui.player.amp.util.Config;
-import javazoom.jlgui.player.amp.visual.ui.SpectrumTimeAnalyzer;
+//import javazoom.jlgui.player.amp.visual.ui.SpectrumTimeAnalyzer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -196,7 +196,7 @@ public class Skin
private String viscolor = null;
private int[] visualLocation = { 24, 44 };
private int[] visualSize = { 76, 15 };
- private SpectrumTimeAnalyzer analyzer = null;
+ //private SpectrumTimeAnalyzer analyzer = null;
/*-- EqualizerUI --*/
private Image imFullEqualizer = null;
private Image imEqualizer = null;
@@ -473,7 +473,7 @@ public class Skin
acTimeIcon.setIcons(timeIcons);
acTimeIcon.setConstraints(new AbsoluteConstraints(iconsLocation[2], iconsLocation[3]));
/*-- DSP --*/
- setAnalyzerPanel();
+ //setAnalyzerPanel();
/*-- Pos Bar --*/
readPanel(releasedPosIm, releasedPosPanel, pressedPosIm, pressedPosPanel, imPosBar);
setPosBarPanel();
@@ -724,7 +724,7 @@ public class Skin
{
log.info("DSP disabled");
}
- else
+ /*else
{
if (analyzer == null) analyzer = new SpectrumTimeAnalyzer();
String visualMode = config.getVisualMode();
@@ -745,7 +745,7 @@ public class Skin
analyzer.setPeakDelay((int) (fps * SpectrumTimeAnalyzer.DEFAULT_SPECTRUM_ANALYSER_PEAK_DELAY_FPS_RATIO));
analyzer.setConstraints(new AbsoluteConstraints(visualLocation[0], visualLocation[1], visualSize[0], visualSize[1]));
analyzer.setToolTipText(getResource("panel.analyzer"));
- }
+ }*/
}
/**
@@ -1343,10 +1343,10 @@ public class Skin
return acSecondL;
}
- public SpectrumTimeAnalyzer getAcAnalyzer()
+ /*public SpectrumTimeAnalyzer getAcAnalyzer()
{
return analyzer;
- }
+ }*/
public ActiveJButton getAcEqPresets()
{
diff --git a/java/src/pm/Action.java b/java/src/pm/Action.java
index 730042e..244948a 100644
--- a/java/src/pm/Action.java
+++ b/java/src/pm/Action.java
@@ -15,5 +15,5 @@ public enum Action {
TEST,
VOLUME_DOWN,
VOLUME_UP,
- TRAIN, STOP, SAVE, RECOGNIZE, LOAD;
+ TRAIN, STOP, SAVE, RECOGNIZE, LOAD, SHUFFLE;
}
diff --git a/java/src/pm/Application.java b/java/src/pm/Application.java
index 24f956f..6239fde 100644
--- a/java/src/pm/Application.java
+++ b/java/src/pm/Application.java
@@ -6,12 +6,11 @@ import pm.task.TaskGatherer;
import pm.task.TaskListener;
public abstract class Application extends TaskListener {
-
public Application() {
super();
TaskGatherer.add(this);
}
-
+
public void run() {
try {
initialise();
diff --git a/java/src/pm/Device.java b/java/src/pm/Device.java
index 58ed036..c1a0a73 100644
--- a/java/src/pm/Device.java
+++ b/java/src/pm/Device.java
@@ -1,6 +1,5 @@
package pm;
-import pm.exception.application.ApplicationExitException;
import pm.exception.device.DeviceExitException;
import pm.exception.device.DeviceInitialiseException;
import pm.macro.Event;
diff --git a/java/src/pm/Main.java b/java/src/pm/Main.java
index 06b70c9..21cc669 100644
--- a/java/src/pm/Main.java
+++ b/java/src/pm/Main.java
@@ -6,10 +6,13 @@ import pm.application.ApplicationCycle;
import pm.application.Winamp.WinampApplication;
import pm.application.example.ExampleApplication;
import pm.application.iTunes.iTunesApplication;
+import pm.application.windows.gomplayer.GomPlayerApplication;
+import pm.application.windows.wmp.WMPApplication;
import pm.device.gui.GUIDevice;
import pm.device.javainput.rumblepad.RumblepadDevice;
import pm.device.jintellitype.JIntellitypeDevice;
import pm.device.lantextinput.LanTextDevice;
+import pm.device.player.PlayerDevice;
import pm.device.textinput.TextDevice;
import pm.device.wiimote.WiimoteDevice;
import pm.exception.application.ApplicationExitException;
@@ -17,7 +20,6 @@ import pm.exception.device.DeviceExitException;
import pm.exception.device.DeviceInitialiseException;
import pm.task.TaskGatherer;
import pm.task.TaskListener;
-import pm.util.ArrayCycle;
public class Main extends TaskListener {
//protected String[] deviceClassArray;
@@ -39,8 +41,9 @@ public class Main extends TaskListener {
public void initialise() throws DeviceInitialiseException {
add(new JIntellitypeDevice());
+ //add(new PlayerDevice());
//add(new RumblepadDevice());
- //add(new WiimoteDevice());
+ add(new WiimoteDevice());
//add(new GUIDevice());
//add(new TextDevice());
//add(new LanTextDevice());
@@ -52,10 +55,11 @@ public class Main extends TaskListener {
}
}
- add(new ExampleApplication());
+ //add(new ExampleApplication());
+ //add(new WMPApplication());
+ add(new GomPlayerApplication());
//add(new WinampApplication());
//add(new iTunesApplication());
- applicationCycle.next();
for (Application application : applicationCycle) {
application.start();
}
@@ -87,6 +91,7 @@ public class Main extends TaskListener {
switch (action) {
case NEXT:
applicationCycle.next();
+ System.out.println(applicationCycle.current());
break;
case PREVIOUS:
applicationCycle.previous();
diff --git a/java/src/pm/application/iTunes/iTunesApplication.java b/java/src/pm/application/iTunes/iTunesApplication.java
index db44aa1..e341f1a 100644
--- a/java/src/pm/application/iTunes/iTunesApplication.java
+++ b/java/src/pm/application/iTunes/iTunesApplication.java
@@ -41,6 +41,7 @@ public class iTunesApplication extends Application implements iTunesEventsInterf
switch (action) {
case PLAY:
iTunes.playPause();
+ break;
case NEXT:
iTunes.nextTrack();
break;
@@ -62,7 +63,10 @@ public class iTunesApplication extends Application implements iTunesEventsInterf
case VOLUME_DOWN:
iTunes.setSoundVolume(getVolume() - VOLUME_CHANGE_RATE);
break;
- }
+ case SHUFFLE:
+ iTunes.toggleShuffle();
+ break;
+ }
}
protected int getVolume() {
diff --git a/java/src/pm/application/windows/Command.java b/java/src/pm/application/windows/Command.java
new file mode 100644
index 0000000..9a6b81b
--- /dev/null
+++ b/java/src/pm/application/windows/Command.java
@@ -0,0 +1,68 @@
+package pm.application.windows;
+
+public enum Command {
+ BROWSER_BACKWARD (1),
+ BROWSER_FORWARD (2),
+ BROWSER_REFRESH (3),
+ BROWSER_STOP (4),
+ BROWSER_SEARCH (5),
+ BROWSER_FAVORITES (6),
+ BROWSER_HOME (7),
+ VOLUME_MUTE (8),
+ VOLUME_DOWN (9),
+ VOLUME_UP (10),
+ MEDIA_NEXTTRACK (11),
+ MEDIA_PREVIOUSTRACK (12),
+ MEDIA_STOP (13),
+ MEDIA_PLAY_PAUSE (14),
+ LAUNCH_MAIL (15),
+ LAUNCH_MEDIA_SELECT (16),
+ LAUNCH_APP1 (17),
+ LAUNCH_APP2 (18),
+ BASS_DOWN (19),
+ BASS_BOOST (20),
+ BASS_UP (21),
+ TREBLE_DOWN (22),
+ TREBLE_UP (23),
+ MICROPHONE_VOLUME_MUTE (24),
+ MICROPHONE_VOLUME_DOWN (25),
+ MICROPHONE_VOLUME_UP (26),
+ HELP (27),
+ FIND (28),
+ NEW (29),
+ OPEN (30),
+ CLOSE (31),
+ SAVE (32),
+ PRINT (33),
+ UNDO (34),
+ REDO (35),
+ COPY (36),
+ CUT (37),
+ PASTE (38),
+ REPLY_TO_MAIL (39),
+ FORWARD_MAIL (40),
+ SEND_MAIL (41),
+ SPELL_CHECK (42),
+ DICTATE_OR_COMMAND_CONTROL_TOGGLE (43),
+ MIC_ON_OFF_TOGGLE (44),
+ CORRECTION_LIST (45),
+ MEDIA_PLAY (46),
+ MEDIA_PAUSE (47),
+ MEDIA_RECORD (48),
+ MEDIA_FAST_FORWARD (49),
+ MEDIA_REWIND (50),
+ MEDIA_CHANNEL_UP (51),
+ MEDIA_CHANNEL_DOWN (52),
+ DELETE (53),
+ DWM_FLIP3D (54);
+
+ protected int code;
+
+ private Command(int code) {
+ this.code = code;
+ }
+
+ public int getCode() {
+ return code;
+ }
+}
diff --git a/java/src/pm/application/windows/VirtualKey.java b/java/src/pm/application/windows/VirtualKey.java
new file mode 100644
index 0000000..650fa85
--- /dev/null
+++ b/java/src/pm/application/windows/VirtualKey.java
@@ -0,0 +1,181 @@
+package pm.application.windows;
+
+public enum VirtualKey {
+ /*
+ * VK_0 - VK_9 are the same as ASCII '0' - '9' (0x30 - 0x39)
+ * 0x40 : unassigned
+ * VK_A - VK_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A)
+ */
+ LBUTTON (0x01),
+ RBUTTON (0x02),
+ CANCEL (0x03),
+ MBUTTON (0x04),
+ XBUTTON1 (0x05),
+ XBUTTON2 (0x06),
+ BACK (0x08),
+ TAB (0x09),
+ CLEAR (0x0C),
+ RETURN (0x0D),
+ SHIFT (0x10),
+ CONTROL (0x11),
+ MENU (0x12),
+ PAUSE (0x13),
+ CAPITAL (0x14),
+ KANA (0x15),
+ HANGEUL (0x15),
+ HANGUL (0x15),
+ JUNJA (0x17),
+ FINAL (0x18),
+ HANJA (0x19),
+ KANJI (0x19),
+ ESCAPE (0x1B),
+ CONVERT (0x1C),
+ NONCONVERT (0x1D),
+ ACCEPT (0x1E),
+ MODECHANGE (0x1F),
+ SPACE (0x20),
+ PRIOR (0x21),
+ NEXT (0x22),
+ END (0x23),
+ HOME (0x24),
+ LEFT (0x25),
+ UP (0x26),
+ RIGHT (0x27),
+ DOWN (0x28),
+ SELECT (0x29),
+ PRINT (0x2A),
+ EXECUTE (0x2B),
+ SNAPSHOT (0x2C),
+ INSERT (0x2D),
+ DELETE (0x2E),
+ HELP (0x2F),
+ LWIN (0x5B),
+ RWIN (0x5C),
+ APPS (0x5D),
+ SLEEP (0x5F),
+ NUMPAD0 (0x60),
+ NUMPAD1 (0x61),
+ NUMPAD2 (0x62),
+ NUMPAD3 (0x63),
+ NUMPAD4 (0x64),
+ NUMPAD5 (0x65),
+ NUMPAD6 (0x66),
+ NUMPAD7 (0x67),
+ NUMPAD8 (0x68),
+ NUMPAD9 (0x69),
+ MULTIPLY (0x6A),
+ ADD (0x6B),
+ SEPARATOR (0x6C),
+ SUBTRACT (0x6D),
+ DECIMAL (0x6E),
+ DIVIDE (0x6F),
+ F1 (0x70),
+ F2 (0x71),
+ F3 (0x72),
+ F4 (0x73),
+ F5 (0x74),
+ F6 (0x75),
+ F7 (0x76),
+ F8 (0x77),
+ F9 (0x78),
+ F10 (0x79),
+ F11 (0x7A),
+ F12 (0x7B),
+ F13 (0x7C),
+ F14 (0x7D),
+ F15 (0x7E),
+ F16 (0x7F),
+ F17 (0x80),
+ F18 (0x81),
+ F19 (0x82),
+ F20 (0x83),
+ F21 (0x84),
+ F22 (0x85),
+ F23 (0x86),
+ F24 (0x87),
+ NUMLOCK (0x90),
+ SCROLL (0x91),
+ OEM_NEC_EQUAL (0x92),
+ OEM_FJ_JISHO (0x92),
+ OEM_FJ_MASSHOU (0x93),
+ OEM_FJ_TOUROKU (0x94),
+ OEM_FJ_LOYA (0x95),
+ OEM_FJ_ROYA (0x96),
+ LSHIFT (0xA0),
+ RSHIFT (0xA1),
+ LCONTROL (0xA2),
+ RCONTROL (0xA3),
+ LMENU (0xA4),
+ RMENU (0xA5),
+ BROWSER_BACK (0xA6),
+ BROWSER_FORWARD (0xA7),
+ BROWSER_REFRESH (0xA8),
+ BROWSER_STOP (0xA9),
+ BROWSER_SEARCH (0xAA),
+ BROWSER_FAVORITES (0xAB),
+ BROWSER_HOME (0xAC),
+ VOLUME_MUTE (0xAD),
+ VOLUME_DOWN (0xAE),
+ VOLUME_UP (0xAF),
+ MEDIA_NEXT_TRACK (0xB0),
+ MEDIA_PREV_TRACK (0xB1),
+ MEDIA_STOP (0xB2),
+ MEDIA_PLAY_PAUSE (0xB3),
+ LAUNCH_MAIL (0xB4),
+ LAUNCH_MEDIA_SELECT (0xB5),
+ LAUNCH_APP1 (0xB6),
+ LAUNCH_APP2 (0xB7),
+ OEM_1 (0xBA),
+ OEM_PLUS (0xBB),
+ OEM_COMMA (0xBC),
+ OEM_MINUS (0xBD),
+ OEM_PERIOD (0xBE),
+ OEM_2 (0xBF),
+ OEM_3 (0xC0),
+ OEM_4 (0xDB),
+ OEM_5 (0xDC),
+ OEM_6 (0xDD),
+ OEM_7 (0xDE),
+ OEM_8 (0xDF),
+ OEM_AX (0xE1),
+ OEM_102 (0xE2),
+ ICO_HELP (0xE3),
+ ICO_00 (0xE4),
+ PROCESSKEY (0xE5),
+ ICO_CLEAR (0xE6),
+ PACKET (0xE7),
+ OEM_RESET (0xE9),
+ OEM_JUMP (0xEA),
+ OEM_PA1 (0xEB),
+ OEM_PA2 (0xEC),
+ OEM_PA3 (0xED),
+ OEM_WSCTRL (0xEE),
+ OEM_CUSEL (0xEF),
+ OEM_ATTN (0xF0),
+ OEM_FINISH (0xF1),
+ OEM_COPY (0xF2),
+ OEM_AUTO (0xF3),
+ OEM_ENLW (0xF4),
+ OEM_BACKTAB (0xF5),
+ ATTN (0xF6),
+ CRSEL (0xF7),
+ EXSEL (0xF8),
+ EREOF (0xF9),
+ PLAY (0xFA),
+ ZOOM (0xFB),
+ NONAME (0xFC),
+ PA1 (0xFD),
+ OEM_CLEAR (0xFE);
+
+
+ protected int code;
+
+ private VirtualKey(int code) {
+ this.code = code;
+ }
+
+ public int getCode() {
+ return code;
+ }
+
+}
diff --git a/java/src/pm/application/windows/WindowsApplication.java b/java/src/pm/application/windows/WindowsApplication.java
new file mode 100644
index 0000000..7e1dd22
--- /dev/null
+++ b/java/src/pm/application/windows/WindowsApplication.java
@@ -0,0 +1,106 @@
+package pm.application.windows;
+
+import java.io.IOException;
+
+import com.eaio.nativecall.IntCall;
+import com.eaio.nativecall.NativeCall;
+
+import pm.Application;
+import pm.exception.application.ApplicationExitException;
+import pm.exception.application.ApplicationInitialiseException;
+import pm.exception.application.windows.SendCommandException;
+import pm.exception.application.windows.SendKeyException;
+import pm.util.Native;
+import pm.util.VBScript;
+
+abstract public class WindowsApplication extends Application {
+ protected final static int TERMINATE_SLEEP = 500;
+ protected final static int START_SLEEP = 500;
+
+ protected final static int WM_APPCOMMAND = 0x0319;
+ protected final static int WM_KEYDOWN = 0x0100;
+
+ protected String path;
+ protected String program;
+ protected String name;
+ protected String target;
+
+ protected Process process;
+ protected int handle;
+ protected IntCall sendMessage;
+ protected IntCall postMessage;
+
+ static {
+ try {
+ NativeCall.init();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public WindowsApplication(String path, String program, String name) {
+ this.path = path;
+ this.program = program;
+ this.name = name;
+ target = path + program;
+ handle = -1;
+ }
+
+ public void initialise() throws ApplicationInitialiseException {
+ try {
+ if (VBScript.isRunning(program)) {
+ handle = Native.getHandle(name);
+ if (handle < 0) {
+ while (VBScript.isRunning(program)) {
+ VBScript.terminate(program);
+ sleep(TERMINATE_SLEEP);
+ }
+ }
+ }
+ if (handle < 0) {
+ process = Runtime.getRuntime().exec(target);
+ while (!VBScript.isRunning(program)) {
+ sleep(START_SLEEP);
+ }
+ IntCall findWindow = new IntCall("user32", "FindWindowA");
+ handle = findWindow.executeCall(new Object[] {null, name});
+ }
+ } catch (IOException e) {}
+ if (handle < 1) {
+ throw new ApplicationInitialiseException();
+ }
+ sendMessage = new IntCall("user32", "SendMessageA");
+ postMessage = new IntCall("user32", "PostMessageA");
+ }
+
+ public void exit() throws ApplicationExitException {
+ if (process != null) {
+ process.destroy();
+ }
+ super.exit();
+ }
+
+ protected void command(Command command) throws SendCommandException {
+ int result = sendMessage.executeCall(new Object[] {
+ handle, WM_APPCOMMAND, handle, command.getCode() << 16});
+ if (result < 1 || sendMessage.getLastError() != null) {
+ throw new SendCommandException();
+ }
+ }
+
+ protected void key(int key) throws SendKeyException {
+ int result = postMessage.executeCall(new Object[] {
+ handle, WM_KEYDOWN, key});
+ if (result < 1 || postMessage.getLastError() != null) {
+ throw new SendKeyException();
+ }
+ }
+
+ protected void key(char key) throws SendKeyException {
+ key((int) Character.toUpperCase(key));
+ }
+
+ protected void key(VirtualKey virtualKey) throws SendKeyException {
+ key(virtualKey.getCode());
+ }
+}
diff --git a/java/src/pm/application/windows/gomplayer/GomPlayerApplication.java b/java/src/pm/application/windows/gomplayer/GomPlayerApplication.java
new file mode 100644
index 0000000..6a6f683
--- /dev/null
+++ b/java/src/pm/application/windows/gomplayer/GomPlayerApplication.java
@@ -0,0 +1,66 @@
+package pm.application.windows.gomplayer;
+
+import pm.Action;
+import pm.application.windows.Command;
+import pm.application.windows.VirtualKey;
+import pm.application.windows.WindowsApplication;
+import pm.exception.application.ApplicationInitialiseException;
+import pm.exception.application.windows.SendCommandException;
+import pm.exception.application.windows.SendKeyException;
+
+public class GomPlayerApplication extends WindowsApplication {
+ protected final static String PATH = "C:\\Program Files (x86)\\GRETECH\\GomPlayer\\";
+ protected final static String PROGRAM = "GOM.exe";
+ protected final static String NAME = "GOM Player";
+
+ protected boolean playing;
+
+ public GomPlayerApplication() {
+ super(PATH, PROGRAM, NAME);
+ playing = false;
+ }
+
+ public void initialise() {
+ try {
+ super.initialise();
+ } catch (ApplicationInitialiseException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void action(Action action) {
+ System.out.println("GomPlayerApplication: " + action);
+ //http://www.keyxl.com/aaa0602/267/GOM-Player-keyboard-shortcuts.htm
+ try {
+ switch (action) {
+ case PLAY:
+ key(VirtualKey.SPACE);
+ break;
+ case NEXT:
+ command(Command.MEDIA_NEXTTRACK);
+ break;
+ case PREVIOUS:
+ command(Command.MEDIA_PREVIOUSTRACK);
+ break;
+ case FORWARD:
+ command(Command.MEDIA_FAST_FORWARD);
+ break;
+ case REWIND:
+ command(Command.MEDIA_REWIND);
+ break;
+ case MUTE:
+ key('m');
+ break;
+ case VOLUME_UP:
+ key(VirtualKey.UP);
+ break;
+ case VOLUME_DOWN:
+ key(VirtualKey.DOWN);
+ break;
+ case SHUFFLE:
+ //
+ break;
+ }
+ } catch (SendCommandException e) {} catch (SendKeyException e) {}
+ }
+}
diff --git a/java/src/pm/application/windows/wmp/WMPApplication.java b/java/src/pm/application/windows/wmp/WMPApplication.java
new file mode 100644
index 0000000..a3203ef
--- /dev/null
+++ b/java/src/pm/application/windows/wmp/WMPApplication.java
@@ -0,0 +1,40 @@
+package pm.application.windows.wmp;
+
+import java.util.prefs.Preferences;
+
+import com.eaio.nativecall.IntCall;
+
+import pm.Action;
+import pm.application.windows.Command;
+import pm.application.windows.WindowsApplication;
+import pm.exception.application.ApplicationInitialiseException;
+import pm.exception.application.windows.SendCommandException;
+
+public class WMPApplication extends WindowsApplication {
+ protected final static String PATH = "C:\\Program Files (x86)\\Windows Media Player\\";
+ protected final static String PROGRAM = "wmplayer.exe";
+ protected final static String NAME = "Windows Media Player";
+
+ public WMPApplication() {
+ super(PATH, PROGRAM, NAME);
+ }
+
+ public void initialise() throws ApplicationInitialiseException {
+ super.initialise();
+ //RegistryKey;
+ }
+
+ public void action(Action action) {
+ System.out.println("WMPApplication: " + action);
+ try {
+ switch (action) {
+ case PLAY:
+ command(Command.MEDIA_PLAY_PAUSE);
+ break;
+ case TEST:
+ command(Command.VOLUME_MUTE);
+ break;
+ }
+ } catch (SendCommandException e) {}
+ }
+}
diff --git a/java/src/pm/device/jintellitype/JIntellitypeDevice.java b/java/src/pm/device/jintellitype/JIntellitypeDevice.java
index d0ced27..21b27d6 100644
--- a/java/src/pm/device/jintellitype/JIntellitypeDevice.java
+++ b/java/src/pm/device/jintellitype/JIntellitypeDevice.java
@@ -29,6 +29,9 @@ public class JIntellitypeDevice extends Device implements HotkeyListener, Intell
public void initialise() throws DeviceInitialiseException {
jit.addHotKeyListener(this);
jit.addIntellitypeListener(this);
+ add(
+ new Hotkey(HotkeyButton.CTRL | HotkeyButton.WIN, 'q'),
+ new Task(Action.PLAY, Target.APPLICATIONS));
add(
new Hotkey(HotkeyButton.CTRL | HotkeyButton.WIN, 'x'),
new Task(Action.EXIT, Target.MAIN));
@@ -38,7 +41,7 @@ public class JIntellitypeDevice extends Device implements HotkeyListener, Intell
add(
new Hotkey(HotkeyButton.CTRL | HotkeyButton.WIN, 'r'),
new Hotkey(HotkeyButton.CTRL | HotkeyButton.WIN, 's'),
- new Continuous(Action.REPEAT, Target.APPLICATION, 500));
+ new Continuous(Action.REPEAT, Target.APPLICATIONS, 500));
}
public void onIntellitype(int command) {
diff --git a/java/src/pm/device/player/PlayerDevice.java b/java/src/pm/device/player/PlayerDevice.java
new file mode 100644
index 0000000..293d686
--- /dev/null
+++ b/java/src/pm/device/player/PlayerDevice.java
@@ -0,0 +1,22 @@
+package pm.device.player;
+
+import javazoom.jlgui.player.amp.StandalonePlayer;
+import pm.Device;
+import pm.exception.device.DeviceExitException;
+
+public class PlayerDevice extends Device {
+ StandalonePlayer standalonePlayer;
+
+ public void initialise() {
+ standalonePlayer = new StandalonePlayer();
+ standalonePlayer.loadUI();
+ //standalonePlayer.loadJS();
+ //standalonePlayer.loadPlaylist();
+ //standalonePlayer.
+ System.out.println("niets!");
+ }
+
+ public void exit() throws DeviceExitException {
+ super.exit();
+ }
+}
diff --git a/java/src/pm/device/wiimote/WiimoteDevice.java b/java/src/pm/device/wiimote/WiimoteDevice.java
index 21d3ed9..2a42788 100644
--- a/java/src/pm/device/wiimote/WiimoteDevice.java
+++ b/java/src/pm/device/wiimote/WiimoteDevice.java
@@ -9,12 +9,15 @@ import pm.Button;
import pm.Device;
import pm.Target;
import pm.Task;
+import pm.device.javainput.rumblepad.RumblepadButton;
import pm.device.wiimote.gesture.GestureDevice;
import pm.exception.device.DeviceInitialiseException;
import pm.exception.event.UnknownButtonException;
import pm.macro.event.Hold;
import pm.macro.event.Press;
import pm.macro.event.Release;
+import pm.task.Continuous;
+import pm.task.Dynamic;
import wiiusej.Wiimote;
import wiiusej.values.Acceleration;
@@ -46,7 +49,7 @@ public class WiimoteDevice extends Device implements GestureListener {
public void initialise() throws DeviceInitialiseException {
wiimote = wiimoteService.getDevice(this);
wiimote.activateMotionSensing();
- add(
+ /*add(
new Hold(WiimoteButton.A),
new Task(Action.TRAIN, Target.DEVICE),
new Task(Action.STOP, Target.DEVICE));
@@ -59,7 +62,37 @@ public class WiimoteDevice extends Device implements GestureListener {
add(
new Hold(WiimoteButton.HOME),
new Task(Action.RECOGNIZE, Target.DEVICE),
- new Task(Action.STOP, Target.DEVICE));
+ new Task(Action.STOP, Target.DEVICE));*/
+ add(
+ new Press(WiimoteButton.A),
+ new Task(Action.PLAY, Target.APPLICATION));
+ add(
+ new Press(WiimoteButton.B),
+ new Task(Action.MUTE, Target.APPLICATION));
+ add(
+ new Press(WiimoteButton.ONE),
+ new Task(Action.SHUFFLE, Target.APPLICATION));
+ add(
+ new Press(WiimoteButton.TWO),
+ new Task(Action.NEXT, Target.MAIN));
+ add(
+ new Press(WiimoteButton.UP),
+ new Task(Action.NEXT, Target.APPLICATION));
+ add(
+ new Press(WiimoteButton.DOWN),
+ new Task(Action.PREVIOUS, Target.APPLICATION));
+ add(
+ new Hold(WiimoteButton.RIGHT),
+ new Dynamic(Action.FORWARD, Target.APPLICATION, 200, -30));
+ add(
+ new Hold(WiimoteButton.LEFT),
+ new Dynamic(Action.REWIND, Target.APPLICATION, 200, -30));
+ add(
+ new Hold(WiimoteButton.MINUS),
+ new Continuous(Action.VOLUME_DOWN, Target.APPLICATION, 100));
+ add(
+ new Hold(WiimoteButton.PLUS),
+ new Continuous(Action.VOLUME_UP, Target.APPLICATION, 100));
}
public void exit() {
diff --git a/java/src/pm/exception/application/windows/SendCommandException.java b/java/src/pm/exception/application/windows/SendCommandException.java
new file mode 100644
index 0000000..09a316e
--- /dev/null
+++ b/java/src/pm/exception/application/windows/SendCommandException.java
@@ -0,0 +1,5 @@
+package pm.exception.application.windows;
+
+public class SendCommandException extends WindowsApplicationException {
+ protected static final long serialVersionUID = 1L;
+}
diff --git a/java/src/pm/exception/application/windows/SendKeyException.java b/java/src/pm/exception/application/windows/SendKeyException.java
new file mode 100644
index 0000000..62be3ac
--- /dev/null
+++ b/java/src/pm/exception/application/windows/SendKeyException.java
@@ -0,0 +1,5 @@
+package pm.exception.application.windows;
+
+public class SendKeyException extends WindowsApplicationException {
+ protected static final long serialVersionUID = 1L;
+}
diff --git a/java/src/pm/exception/application/windows/WindowsApplicationException.java b/java/src/pm/exception/application/windows/WindowsApplicationException.java
new file mode 100644
index 0000000..50027a8
--- /dev/null
+++ b/java/src/pm/exception/application/windows/WindowsApplicationException.java
@@ -0,0 +1,7 @@
+package pm.exception.application.windows;
+
+import pm.exception.ApplicationException;
+
+public class WindowsApplicationException extends ApplicationException {
+ protected static final long serialVersionUID = 1L;
+}
diff --git a/java/src/pm/task/TaskGatherer.java b/java/src/pm/task/TaskGatherer.java
index ed23fd7..799c956 100644
--- a/java/src/pm/task/TaskGatherer.java
+++ b/java/src/pm/task/TaskGatherer.java
@@ -12,48 +12,45 @@ import pm.application.ApplicationCycle;
public class TaskGatherer {
protected static ArrayList 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());
+ }
+}