This commit is contained in:
Bram Veenboer
2011-02-27 16:48:58 +00:00
parent 363356b564
commit b1e3f317a3
8 changed files with 105 additions and 54 deletions

View File

@@ -0,0 +1,41 @@
package pm.application.cmd;
import java.io.IOException;
import pm.Application;
import pm.exception.application.ApplicationExitException;
import pm.exception.application.ApplicationInitialiseException;
import pm.util.Native;
public class CMDApplication extends Application {
protected final static String REGISTRY = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths";
protected String program;
protected String title;
protected Process process;
public CMDApplication(String program, String title) {
this.program = program;
this.title = title;
}
public void initialise() throws ApplicationInitialiseException {
String key = String.format("%s\\%s", REGISTRY, program);
String path = Native.getValue(key);
try {
String command = path.startsWith("\"") ? path : String.format("\"%s\"", path);
command = Native.replaceVariables(command);
process = Runtime.getRuntime().exec(command);
} catch (IOException e) {
e.printStackTrace();
throw new ApplicationInitialiseException();
}
}
public void exit() throws ApplicationExitException {
if (process != null) {
process.destroy();
}
super.exit();
}
}

View File

@@ -0,0 +1,62 @@
package pm.application.cmd.windows;
import pm.application.cmd.CMDApplication;
import pm.exception.application.ApplicationExitException;
import pm.exception.application.ApplicationInitialiseException;
import pm.util.Windows;
import pm.value.Command;
import pm.value.Key;
import pm.value.Type;
abstract public class WindowsApplication extends CMDApplication {
protected final static int TERMINATE_SLEEP = 500;
protected final static int START_SLEEP = 500;
protected String name;
protected Process process;
protected int handle;
public WindowsApplication(String program, String title, String name) {
super(program, title);
this.name = name;
handle = -1;
}
public void initialise() throws ApplicationInitialiseException {
handle = Windows.findWindow(name, null);
if (handle < 1) {
super.initialise();
sleep(START_SLEEP);
handle = Windows.findWindow(name, null);
}
if (handle < 1) {
throw new ApplicationInitialiseException();
}
}
protected void command(Command command) {
Windows.sendMessage(handle, Windows.WM_APPCOMMAND, handle, command.getCode() << 16);
}
protected void command(int command) {
Windows.sendMessage(handle, Windows.WM_COMMAND, command, 0);
}
protected void user(int code) {
Windows.sendMessage(handle, Windows.WM_USER + code, 0, 0);
}
protected void key(Type key, int code) {
int scanCode = Windows.mapVirtualKey(code, Windows.MAPVK_VK_TO_VSC);
Windows.postMessage(handle, key.getCode(), code, 1 | (scanCode << 16));
}
protected void key(Type key, char character) {
key(key, (int) Character.toUpperCase(character));
}
protected void key(Type key, Key virtualKey) {
key(key, virtualKey.getCode());
}
}

View File

@@ -0,0 +1,38 @@
package pm.application.cmd.windows.gomplayer;
import pm.application.cmd.windows.WindowsApplication;
import pm.value.Action;
public class GomPlayerApplication extends WindowsApplication {
protected final static String PROGRAM = "GOM.exe";
protected final static String TITLE = "GOM Player";
protected final static String NAME = "GomPlayer1.x";
public GomPlayerApplication() {
super(PROGRAM, TITLE, NAME);
}
public void action(Action action) {
System.out.println("GomPlayerApplication: " + action);
switch (action) {
case PLAY:
command(0x800C);
break;
case FORWARD:
command(0x8009);
break;
case REWIND:
command(0x8008);
break;
case MUTE:
command(0x8016);
break;
case VOLUME_UP:
command(0x8014);
break;
case VOLUME_DOWN:
command(0x8013);
break;
}
}
}

View File

@@ -0,0 +1,52 @@
package pm.application.cmd.windows.wmp;
import pm.application.cmd.windows.WindowsApplication;
import pm.value.Action;
import pm.value.Command;
public class WMPApplication extends WindowsApplication {
protected final static String PROGRAM = "wmplayer.exe";
protected final static String TITLE = "Windows Media Player";
protected final static String NAME = "WMPlayerApp";
public WMPApplication() {
super(PROGRAM, TITLE, NAME);
}
public void action(Action action) {
System.out.println("WMPApplication: " + action);
System.out.println(handle);
switch (action) {
case PLAY:
command(18808);
break;
case NEXT:
command(18811);
break;
case PREVIOUS:
command(18810);
break;
case FORWARD:
command(18813);
break;
case REWIND:
command(18812);
break;
case MUTE:
command(18817);
break;
case VOLUME_UP:
command(18815);
break;
case VOLUME_DOWN:
command(18816);
break;
case SHUFFLE:
command(18842);
break;
case REPEAT:
command(18843);
break;
}
}
}