From 395a22bc5aa5a0da3c8a873a3190baf48d621df2 Mon Sep 17 00:00:00 2001 From: Rik Veenboer Date: Sun, 17 Jul 2011 20:36:51 +0000 Subject: [PATCH] Mimis Native functionaliteit overgebracht op JNI. --- java/NativeCall.dll | Bin 7680 -> 0 bytes java/lib/nativecall-0.4.1.jar | Bin 9414 -> 0 bytes java/lib/nativeloader-200505172341.jar | Bin 4939 -> 0 bytes java/mimis.dll | Bin 0 -> 163474 bytes java/src/mimis/Manager.java | 2 +- java/src/mimis/Worker.java | 3 + .../mimis/application/cmd/CMDApplication.java | 8 +-- .../cmd/windows/WindowsApplication.java | 42 ++++++------- .../gomplayer/GomPlayerApplication.java | 4 +- .../cmd/windows/winamp/WinampApplication.java | 8 +-- .../cmd/windows/wmp/WMPApplication.java | 4 +- .../application/itunes/iTunesApplication.java | 18 ++---- .../mimis/application/mpc/MPCApplication.java | 4 +- .../mimis/application/vlc/VLCApplication.java | 9 +-- java/src/mimis/device/lirc/LircDevice.java | 17 ++--- .../mimis/device/wiimote/WiimoteDevice.java | 32 +++++----- .../device/wiimote/WiimoteDiscovery.java | 2 +- java/src/mimis/util/Native.java | 58 ++++++++--------- java/src/mimis/util/VBScript.java | 59 ------------------ java/src/mimis/util/Windows.java | 44 ------------- 20 files changed, 94 insertions(+), 220 deletions(-) delete mode 100644 java/NativeCall.dll delete mode 100644 java/lib/nativecall-0.4.1.jar delete mode 100644 java/lib/nativeloader-200505172341.jar create mode 100644 java/mimis.dll delete mode 100644 java/src/mimis/util/VBScript.java delete mode 100644 java/src/mimis/util/Windows.java diff --git a/java/NativeCall.dll b/java/NativeCall.dll deleted file mode 100644 index 6e2cad120371488b6f94c2cc7d2a953a4a8db09f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7680 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%0AmjW=abj^+|$a6DOMiRgHcJ2c-bTqH082{qsuP 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

c=at{#xwO)k?Ajdo#)`6(( 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 extends Worker { protected Log log = LogFactory.getLog(getClass()); protected static final long serialVersionUID = 1L; - protected static final int INTERVAL = 500; + protected static final int INTERVAL = 1000; protected T[] manageableArray; protected Map> buttonMap; diff --git a/java/src/mimis/Worker.java b/java/src/mimis/Worker.java index 5c83b6e..0229b30 100644 --- a/java/src/mimis/Worker.java +++ b/java/src/mimis/Worker.java @@ -14,6 +14,7 @@ public abstract class Worker implements Runnable { protected boolean run = false; protected boolean active = false; + protected int work = 0; public void start(boolean thread) { run = true; @@ -42,6 +43,7 @@ public abstract class Worker implements Runnable { synchronized (this) { notifyAll(); } + log.debug(String.format("%s: %d", getClass(), work)); } protected void sleep(int time) { @@ -86,6 +88,7 @@ public abstract class Worker implements Runnable { public final void run() { while (run) { if (active()) { + ++work; work(); } else { try { diff --git a/java/src/mimis/application/cmd/CMDApplication.java b/java/src/mimis/application/cmd/CMDApplication.java index c201ea7..456f4e8 100644 --- a/java/src/mimis/application/cmd/CMDApplication.java +++ b/java/src/mimis/application/cmd/CMDApplication.java @@ -6,8 +6,6 @@ import mimis.Application; import mimis.exception.worker.ActivateException; import mimis.exception.worker.DeactivateException; import mimis.util.Native; -import mimis.util.VBScript; - public abstract class CMDApplication extends Application { protected final static String REGISTRY = "HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths"; @@ -43,11 +41,7 @@ public abstract class CMDApplication extends Application { } public boolean active() { - try { - return active = VBScript.isRunning(program); - } catch (IOException e) { - return active = false; - } + return active = Native.isRunning(program); } public void deactivate() throws DeactivateException { diff --git a/java/src/mimis/application/cmd/windows/WindowsApplication.java b/java/src/mimis/application/cmd/windows/WindowsApplication.java index 529a653..58bc794 100644 --- a/java/src/mimis/application/cmd/windows/WindowsApplication.java +++ b/java/src/mimis/application/cmd/windows/WindowsApplication.java @@ -1,12 +1,9 @@ package mimis.application.cmd.windows; -import java.io.IOException; - import mimis.application.cmd.CMDApplication; import mimis.exception.worker.ActivateException; import mimis.exception.worker.DeactivateException; -import mimis.util.VBScript; -import mimis.util.Windows; +import mimis.util.Native; import mimis.value.Command; import mimis.value.Key; import mimis.value.Type; @@ -15,61 +12,64 @@ public abstract class WindowsApplication extends CMDApplication { protected final static int TERMINATE_SLEEP = 500; protected final static int START_SLEEP = 500; - protected String name; + public static final int WM_CLOSE = 0x0010; + public static final int WM_COMMAND = 0x0111; + public static final int WM_APPCOMMAND = 0x0319; + public static final int WM_USER = 0x0400; + public static final int MAPVK_VK_TO_VSC = 0; + + protected String window; protected Process process; protected int handle; - public WindowsApplication(String program, String title, String name) { + public WindowsApplication(String program, String title, String window) { super(program, title); - this.name = name; - handle = -1; + this.window = window; + handle = 0; } public void activate() throws ActivateException { super.activate(); - handle = Windows.findWindow(name, null); + handle = Native.getHandle(window); if (handle < 1) { sleep(START_SLEEP); - handle = Windows.findWindow(name, null); + handle = Native.getHandle(window); } active = handle > 0; - if (handle < 1) { + if (!active) { throw new ActivateException(); } } public boolean active() { if (!active) { - handle = Windows.findWindow(name, null); + handle = Native.getHandle(window); } return super.active(); } public void deactivate() throws DeactivateException { - try { - VBScript.terminate(program); - } catch (IOException e) { - log.error(e); + if (!Native.terminate(program)) { throw new DeactivateException(); } } protected void command(Command command) { - Windows.sendMessage(handle, Windows.WM_APPCOMMAND, handle, command.getCode() << 16); + Native.sendMessage(handle, WM_APPCOMMAND, handle, command.getCode() << 16); } protected void command(int command) { - Windows.sendMessage(handle, Windows.WM_COMMAND, command, 0); + Native.sendMessage(handle, WM_COMMAND, command, 0); } protected int user(int wParam, int lParam) { - return Windows.sendMessage(handle, Windows.WM_USER, wParam, lParam); + return Native.sendMessage(handle, WM_USER, wParam, lParam); //return Windows.sendMessage(handle, Windows.WM_USER + wParam, 0, 0); } protected void key(Type type, int code) { - int scanCode = Windows.mapVirtualKey(code, Windows.MAPVK_VK_TO_VSC); - Windows.postMessage(handle, type.getCode(), code, 1 | (scanCode << 16)); + int scanCode = Native.mapVirtualKey(code, MAPVK_VK_TO_VSC); + Native.postMessage(handle, type.getCode(), code, 1 | (scanCode << 16)); } protected void key(Type type, char character) { diff --git a/java/src/mimis/application/cmd/windows/gomplayer/GomPlayerApplication.java b/java/src/mimis/application/cmd/windows/gomplayer/GomPlayerApplication.java index d9a58f1..b00ba00 100644 --- a/java/src/mimis/application/cmd/windows/gomplayer/GomPlayerApplication.java +++ b/java/src/mimis/application/cmd/windows/gomplayer/GomPlayerApplication.java @@ -10,7 +10,7 @@ import mimis.value.Amount; 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"; + protected final static String WINDOW = "GomPlayer1.x"; protected static final int VOLUME_SLEEP = 100; protected static final int SEEK_SLEEP = 100; @@ -19,7 +19,7 @@ public class GomPlayerApplication extends WindowsApplication { protected SeekWorker seekWorker; public GomPlayerApplication() { - super(PROGRAM, TITLE, NAME); + super(PROGRAM, TITLE, WINDOW); volumeWorker = new VolumeWorker(); seekWorker = new SeekWorker(); } diff --git a/java/src/mimis/application/cmd/windows/winamp/WinampApplication.java b/java/src/mimis/application/cmd/windows/winamp/WinampApplication.java index 81a5501..fd08351 100644 --- a/java/src/mimis/application/cmd/windows/winamp/WinampApplication.java +++ b/java/src/mimis/application/cmd/windows/winamp/WinampApplication.java @@ -9,12 +9,12 @@ import mimis.value.Action; public class WinampApplication extends WindowsApplication { protected final static String PROGRAM = "winamp.exe"; protected final static String TITLE = "Winamp"; - protected final static String NAME = "Winamp v1.x"; + protected final static String WINDOW = "Winamp v1.x"; protected final static int STATUS_PLAYING = 1; protected final static int STATUS_PAUSED = 3; protected final static int STATUS_STOPPED = 0; - + protected final static int IPC_ISPLAYING = 104; protected final static int IPC_GETOUTPUTTIME = 105; protected final static int IPC_SETVOLUME = 122; @@ -40,9 +40,9 @@ public class WinampApplication extends WindowsApplication { protected SeekWorker seekWorker; protected double volume; protected boolean muted; - + public WinampApplication() { - super(PROGRAM, TITLE, NAME); + super(PROGRAM, TITLE, WINDOW); volume = getVolume(); muted = volume == 0; volumeWorker = new VolumeWorker(); diff --git a/java/src/mimis/application/cmd/windows/wmp/WMPApplication.java b/java/src/mimis/application/cmd/windows/wmp/WMPApplication.java index 95c86c7..d821e2f 100644 --- a/java/src/mimis/application/cmd/windows/wmp/WMPApplication.java +++ b/java/src/mimis/application/cmd/windows/wmp/WMPApplication.java @@ -9,14 +9,14 @@ import mimis.value.Action; 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"; + protected final static String WINDOW = "WMPlayerApp"; protected static final int VOLUME_SLEEP = 120; protected VolumeWorker volumeWorker; public WMPApplication() { - super(PROGRAM, TITLE, NAME); + super(PROGRAM, TITLE, WINDOW); volumeWorker = new VolumeWorker(); } diff --git a/java/src/mimis/application/itunes/iTunesApplication.java b/java/src/mimis/application/itunes/iTunesApplication.java index 9bc04e3..707848d 100644 --- a/java/src/mimis/application/itunes/iTunesApplication.java +++ b/java/src/mimis/application/itunes/iTunesApplication.java @@ -1,12 +1,10 @@ package mimis.application.itunes; -import java.io.IOException; - import mimis.Application; import mimis.Worker; import mimis.exception.worker.ActivateException; import mimis.exception.worker.DeactivateException; -import mimis.util.VBScript; +import mimis.util.Native; import mimis.value.Action; import com.dt.iTunesController.ITCOMDisabledReason; @@ -48,16 +46,12 @@ public class iTunesApplication extends Application implements iTunesEventsInterf } public boolean active() { - try { - if (!active && !quiting && VBScript.isRunning(PROGRAM)) { - try { - activate(); - } catch (ActivateException e) { - log.error(e); - } + if (!active && !quiting && Native.isRunning(PROGRAM)) { + try { + activate(); + } catch (ActivateException e) { + log.error(e); } - } catch (IOException e) { - log.error(e); } try { iTunes.getMute(); diff --git a/java/src/mimis/application/mpc/MPCApplication.java b/java/src/mimis/application/mpc/MPCApplication.java index 70fc821..b711574 100644 --- a/java/src/mimis/application/mpc/MPCApplication.java +++ b/java/src/mimis/application/mpc/MPCApplication.java @@ -9,7 +9,7 @@ import mimis.value.Action; public class MPCApplication extends WindowsApplication { protected final static String PROGRAM = "mpc-hc.exe"; protected final static String TITLE = "Media Player Classic"; - protected final static String NAME = "MediaPlayerClassicW"; + protected final static String WINDOW = "MediaPlayerClassicW"; protected static final int VOLUME_SLEEP = 50; protected static final int SEEK_SLEEP = 50; @@ -18,7 +18,7 @@ public class MPCApplication extends WindowsApplication { protected SeekWorker seekWorker; public MPCApplication() { - super(PROGRAM, TITLE, NAME); + super(PROGRAM, TITLE, WINDOW); volumeWorker = new VolumeWorker(); seekWorker = new SeekWorker(); } diff --git a/java/src/mimis/application/vlc/VLCApplication.java b/java/src/mimis/application/vlc/VLCApplication.java index 73f0a11..230ec27 100644 --- a/java/src/mimis/application/vlc/VLCApplication.java +++ b/java/src/mimis/application/vlc/VLCApplication.java @@ -12,7 +12,6 @@ import mimis.application.cmd.CMDApplication; import mimis.exception.worker.ActivateException; import mimis.exception.worker.DeactivateException; import mimis.util.Native; -import mimis.util.VBScript; import mimis.value.Action; import mimis.value.Amount; @@ -41,7 +40,7 @@ public class VLCApplication extends CMDApplication { volumeWorker = new VolumeWorker(); seekWorker = new SeekWorker(); } - + public String getPath() { Pattern pattern = Pattern.compile("\"([^\"]+)\""); Matcher matcher = pattern.matcher(Native.getValue(REGISTRY)); @@ -66,11 +65,7 @@ public class VLCApplication extends CMDApplication { super.stop(); volumeWorker.stop(); seekWorker.stop(); - try { - VBScript.terminate(program); - } catch (IOException e) { - log.error(e); - } + Native.terminate(program); } public void begin(Action action) { diff --git a/java/src/mimis/device/lirc/LircDevice.java b/java/src/mimis/device/lirc/LircDevice.java index f0704b3..6a51699 100644 --- a/java/src/mimis/device/lirc/LircDevice.java +++ b/java/src/mimis/device/lirc/LircDevice.java @@ -1,6 +1,5 @@ package mimis.device.lirc; -import java.io.IOException; import java.util.HashMap; import mimis.Button; @@ -12,7 +11,7 @@ import mimis.exception.worker.DeactivateException; import mimis.sequence.state.Press; import mimis.sequence.state.Release; import mimis.util.Multiplexer; -import mimis.util.VBScript; +import mimis.util.Native; import mimis.util.multiplexer.SignalListener; import mimis.value.Signal; @@ -56,16 +55,12 @@ public class LircDevice extends Device implements LircButtonListener, SignalList log.error(e); } } else if (!active) { - try { - if (VBScript.isRunning(PROGRAM)) { - try { - activate(); - } catch (ActivateException e) { - log.error(e); - } + if (Native.isRunning(PROGRAM)) { + try { + activate(); + } catch (ActivateException e) { + log.error(e); } - } catch (IOException e) { - log.error(e); } } return active; diff --git a/java/src/mimis/device/wiimote/WiimoteDevice.java b/java/src/mimis/device/wiimote/WiimoteDevice.java index 885a97a..d689685 100644 --- a/java/src/mimis/device/wiimote/WiimoteDevice.java +++ b/java/src/mimis/device/wiimote/WiimoteDevice.java @@ -44,7 +44,7 @@ public class WiimoteDevice extends Device implements GestureListener { public WiimoteDevice() { super(TITLE); eventMapCycle = new WiimoteEventMapCycle(); - //wiimoteDiscovery = new WiimoteDiscovery(this); + wiimoteDiscovery = new WiimoteDiscovery(this); gestureDevice = new GestureDevice(); gestureDevice.add(this); gestureId = 0; @@ -53,7 +53,7 @@ public class WiimoteDevice extends Device implements GestureListener { /* Worker */ public void activate() throws ActivateException { - //connect(); + connect(); try { wiimote = wiimoteService.getDevice(this); ledWorker.activate(); @@ -65,15 +65,15 @@ public class WiimoteDevice extends Device implements GestureListener { super.activate(); } - /*public boolean active() { + public boolean active() { if (wiimote != null) { - /*if (!ledWorker.active()) { + if (!ledWorker.active()) { try { ledWorker.activate(); } catch (ActivateException e) { log.error(e); } - }* + } connected = false; wiimote.getStatus(); synchronized (this) { @@ -93,16 +93,16 @@ public class WiimoteDevice extends Device implements GestureListener { } } return active; - }*/ + } public void stop() { super.stop(); ledWorker.stop(); /*if (wiimote != null) { disconnect(); - } - wiimoteService.exit();*/ - //wiimoteDiscovery.stop(); + }*/ + wiimoteService.exit(); + wiimoteDiscovery.stop(); } /* Events */ @@ -170,7 +170,7 @@ public class WiimoteDevice extends Device implements GestureListener { } } - /*public void connected() { + public void connected() { try { wiimote = wiimoteService.getDevice(this); try { @@ -181,20 +181,20 @@ public class WiimoteDevice extends Device implements GestureListener { } catch (DeviceNotFoundException e) { log.error(e); } - }*/ + } - /*public void disconnect() { + public void disconnect() { wiimote.disconnect(); wiimote = null; - }*/ + } - /*public void disconnected() { + public void disconnected() { try { wiimoteDiscovery.activate(); } catch (ActivateException e) { log.error(e); } - }*/ + } /* Listeners */ public void onButtonsEvent(WiimoteButtonsEvent event) { @@ -222,7 +222,7 @@ public class WiimoteDevice extends Device implements GestureListener { System.out.printf("id #%d, prob %.0f%%, valid %b\n", event.getId(), 100 * event.getProbability(), event.isValid()); } } - + class LedWorker extends Worker { protected ArrayCycle ledCycle; diff --git a/java/src/mimis/device/wiimote/WiimoteDiscovery.java b/java/src/mimis/device/wiimote/WiimoteDiscovery.java index 5e4f8e9..e6412ce 100644 --- a/java/src/mimis/device/wiimote/WiimoteDiscovery.java +++ b/java/src/mimis/device/wiimote/WiimoteDiscovery.java @@ -14,6 +14,7 @@ public class WiimoteDiscovery extends Worker { public WiimoteDiscovery(WiimoteDevice wiimoteDevice) { this.wiimoteDevice = wiimoteDevice; + disconnect = true; } protected boolean connect() { @@ -53,7 +54,6 @@ public class WiimoteDiscovery extends Worker { public void activate() throws ActivateException { super.activate(); - disconnect = true; } public void deactivate() throws DeactivateException { diff --git a/java/src/mimis/util/Native.java b/java/src/mimis/util/Native.java index 2dab37a..548110f 100644 --- a/java/src/mimis/util/Native.java +++ b/java/src/mimis/util/Native.java @@ -1,48 +1,44 @@ package mimis.util; import java.io.IOException; -import java.util.InputMismatchException; import java.util.Map; import java.util.NoSuchElementException; import java.util.Scanner; public class Native { - public static int getHandle(String title) throws IOException { - String command = String.format("list.exe w"); - Process process = Runtime.getRuntime().exec(command); - Scanner scanner = new Scanner(process.getInputStream()); - scanner.nextLine(); - while (scanner.hasNextLine()) { - Scanner line = new Scanner(scanner.nextLine()); - line.useDelimiter("\t"); - try { - int handle = line.nextInt(); - line.nextInt(); - if (line.hasNext() && line.next().equals(title)) { - return handle; - } - } catch (InputMismatchException e) {} - } - return -1; + static { + System.loadLibrary("mimis"); } - public static String getProgram(int processId) throws IOException { - String command = String.format("list.exe p"); - Process process = Runtime.getRuntime().exec(command); - Scanner scanner = new Scanner(process.getInputStream()); - scanner.nextLine(); - while (scanner.hasNextLine()) { - Scanner line = new Scanner(scanner.nextLine()); - line.useDelimiter("\t"); + public void start() { + /*int handle = getHandle("Winamp v1.x"); + System.out.println(handle); + sendMessage(handle, WindowsApplication.WM_CLOSE, 0, 0); + /*/ + while (true) {//Winamp v1.x + System.out.println(isRunning("winamp.exe")); + //System.out.println(new Native().terminate("winamp.exe")); + //System.out.println(new Native().running("wmplayer.exe")); try { - if (line.nextInt() == processId) { - return line.next(); - } - } catch (InputMismatchException e) {} + Thread.sleep(500); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } } - return null; } + public static void main(String[] args) { + new Native().start(); + } + + public native static int getHandle(String window); + public native static int sendMessage(int handle, int message, int wParam, int lParam); + public native static int postMessage(int handle, int message, int wParam, int lParam); + public static native int mapVirtualKey(int code, int type); + public native static boolean isRunning(String program); + public native static boolean terminate(String program); + public static String getValue(String key, String name) { String command = String.format("reg query \"%s\"", key); try { diff --git a/java/src/mimis/util/VBScript.java b/java/src/mimis/util/VBScript.java deleted file mode 100644 index b54dd26..0000000 --- a/java/src/mimis/util/VBScript.java +++ /dev/null @@ -1,59 +0,0 @@ -package mimis.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"); - 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(); - try { - process.waitFor(); - } catch (InterruptedException e) {} - file.delete(); - 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(); - Process process = Runtime.getRuntime().exec("cscript //NoLogo " + file.getPath()); - try { - process.waitFor(); - } catch (InterruptedException e) {} - file.delete(); - } -} diff --git a/java/src/mimis/util/Windows.java b/java/src/mimis/util/Windows.java deleted file mode 100644 index d5b05b0..0000000 --- a/java/src/mimis/util/Windows.java +++ /dev/null @@ -1,44 +0,0 @@ -package mimis.util; - -import com.eaio.nativecall.IntCall; -import com.eaio.nativecall.NativeCall; - -public class Windows { - public static final int WM_COMMAND = 0x0111; - public static final int WM_APPCOMMAND = 0x0319; - public static final int MAPVK_VK_TO_VSC = 0; - public static final int WM_USER = 0x0400; - - protected static IntCall findWindow; - protected static IntCall sendMessage; - protected static IntCall postMessage; - protected static IntCall mapVirtualKey; - - static { - try { - NativeCall.init(); - findWindow = new IntCall("user32", "FindWindowA"); - sendMessage = new IntCall("user32", "SendMessageA"); - postMessage = new IntCall("user32", "PostMessageA"); - mapVirtualKey = new IntCall("user32", "MapVirtualKeyA"); - } catch (Exception e) { - e.printStackTrace(); - } - } - - public static int findWindow(String className, String windowName) { - return findWindow.executeCall(new Object[] {className, windowName}); - } - - public static int postMessage(int handle, int message, int wParam, int lParam) { - return postMessage.executeCall(new Object[] {handle, message, wParam, lParam}); - } - - public static int sendMessage(int handle, int message, int wParam, int lParam) { - return sendMessage.executeCall(new Object[] {handle, message, wParam, lParam}); - } - - public static int mapVirtualKey(int code, int mapType) { - return mapVirtualKey.executeCall(new Object[] {code, 0}); - } -}