diff --git a/cpp/mimis/.cproject b/cpp/mimis/.cproject
new file mode 100644
index 0000000..05f7342
--- /dev/null
+++ b/cpp/mimis/.cproject
@@ -0,0 +1,1634 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/cpp/mimis/.project b/cpp/mimis/.project
new file mode 100644
index 0000000..5d358ee
--- /dev/null
+++ b/cpp/mimis/.project
@@ -0,0 +1,71 @@
+
+
+ Mimis JNI
+
+
+
+
+
+ org.eclipse.cdt.managedbuilder.core.genmakebuilder
+ clean,full,incremental,
+
+
+ ?name?
+
+
+
+ org.eclipse.cdt.make.core.append_environment
+ true
+
+
+ org.eclipse.cdt.make.core.buildArguments
+
+
+
+ org.eclipse.cdt.make.core.buildCommand
+ make
+
+
+ org.eclipse.cdt.make.core.buildLocation
+ ${workspace_loc:/Mimis JNI/Debug}
+
+
+ org.eclipse.cdt.make.core.contents
+ org.eclipse.cdt.make.core.activeConfigSettings
+
+
+ org.eclipse.cdt.make.core.enableAutoBuild
+ false
+
+
+ org.eclipse.cdt.make.core.enableCleanBuild
+ true
+
+
+ org.eclipse.cdt.make.core.enableFullBuild
+ true
+
+
+ org.eclipse.cdt.make.core.stopOnError
+ true
+
+
+ org.eclipse.cdt.make.core.useDefaultBuildCmd
+ true
+
+
+
+
+ org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder
+ full,incremental,
+
+
+
+
+
+ org.eclipse.cdt.core.cnature
+ org.eclipse.cdt.core.ccnature
+ org.eclipse.cdt.managedbuilder.core.managedBuildNature
+ org.eclipse.cdt.managedbuilder.core.ScannerConfigNature
+
+
diff --git a/cpp/mimis/.settings/org.eclipse.cdt.managedbuilder.core.prefs b/cpp/mimis/.settings/org.eclipse.cdt.managedbuilder.core.prefs
new file mode 100644
index 0000000..e5d73c0
--- /dev/null
+++ b/cpp/mimis/.settings/org.eclipse.cdt.managedbuilder.core.prefs
@@ -0,0 +1,26 @@
+#Sun Jul 17 20:05:29 CEST 2011
+eclipse.preferences.version=1
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cygwin.so.debug.36925639/CPATH/delimiter=;
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cygwin.so.debug.36925639/CPATH/operation=remove
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cygwin.so.debug.36925639/CPLUS_INCLUDE_PATH/delimiter=;
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cygwin.so.debug.36925639/CPLUS_INCLUDE_PATH/operation=remove
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cygwin.so.debug.36925639/C_INCLUDE_PATH/delimiter=;
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cygwin.so.debug.36925639/C_INCLUDE_PATH/operation=remove
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cygwin.so.debug.36925639/append=true
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cygwin.so.debug.36925639/appendContributed=true
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cygwin.so.release.2109617530/CPATH/delimiter=;
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cygwin.so.release.2109617530/CPATH/operation=remove
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cygwin.so.release.2109617530/CPLUS_INCLUDE_PATH/delimiter=;
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cygwin.so.release.2109617530/CPLUS_INCLUDE_PATH/operation=remove
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cygwin.so.release.2109617530/C_INCLUDE_PATH/delimiter=;
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cygwin.so.release.2109617530/C_INCLUDE_PATH/operation=remove
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cygwin.so.release.2109617530/append=true
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.cygwin.so.release.2109617530/appendContributed=true
+environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.cygwin.so.debug.36925639/LIBRARY_PATH/delimiter=;
+environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.cygwin.so.debug.36925639/LIBRARY_PATH/operation=remove
+environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.cygwin.so.debug.36925639/append=true
+environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.cygwin.so.debug.36925639/appendContributed=true
+environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.cygwin.so.release.2109617530/LIBRARY_PATH/delimiter=;
+environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.cygwin.so.release.2109617530/LIBRARY_PATH/operation=remove
+environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.cygwin.so.release.2109617530/append=true
+environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.cygwin.so.release.2109617530/appendContributed=true
diff --git a/cpp/mimis/Debug/copy.bat b/cpp/mimis/Debug/copy.bat
new file mode 100644
index 0000000..6a2bf07
--- /dev/null
+++ b/cpp/mimis/Debug/copy.bat
@@ -0,0 +1 @@
+copy mimis.dll ..\..\Mimis\mimis.dll
\ No newline at end of file
diff --git a/cpp/mimis/Release/copy.bat b/cpp/mimis/Release/copy.bat
new file mode 100644
index 0000000..6a2bf07
--- /dev/null
+++ b/cpp/mimis/Release/copy.bat
@@ -0,0 +1 @@
+copy mimis.dll ..\..\Mimis\mimis.dll
\ No newline at end of file
diff --git a/cpp/mimis/src/mimis.cpp b/cpp/mimis/src/mimis.cpp
new file mode 100644
index 0000000..18b9d34
--- /dev/null
+++ b/cpp/mimis/src/mimis.cpp
@@ -0,0 +1,65 @@
+#include "mimis.h"
+#include
+
+bool getProcessEntry32(const char *program, PROCESSENTRY32 *pe32) {
+ HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
+ if (hSnapshot == INVALID_HANDLE_VALUE) {
+ return false;
+ }
+ bool bFound = false;
+ while (Process32Next(hSnapshot, pe32) != false) {
+ if (strcmp(program, pe32->szExeFile) == 0) {
+ bFound = true;
+ break;
+ }
+ }
+ CloseHandle(hSnapshot);
+ return bFound;
+}
+
+bool getProcess(const char *program, HANDLE *hProcess) {
+ PROCESSENTRY32 *pe32 = new PROCESSENTRY32;
+ bool bResult = false;
+ if (getProcessEntry32(program, pe32)) {
+ *hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, pe32->th32ProcessID);
+ bResult = true;
+ }
+ delete pe32;
+ return bResult;
+}
+
+JNIEXPORT jint JNICALL Java_mimis_util_Native_getHandle(JNIEnv *env, jclass cls, jstring jwindow) {
+ const char *window = env->GetStringUTFChars(jwindow, 0);
+ return (int) FindWindow(window, NULL);
+}
+
+JNIEXPORT jint JNICALL Java_mimis_util_Native_sendMessage(JNIEnv *env, jclass cls, jint handle, jint message, jint wParam, jint lParam) {
+ return SendMessage((HWND) handle, message, wParam, lParam);
+}
+
+JNIEXPORT jint JNICALL Java_mimis_util_Native_postMessage(JNIEnv *env, jclass cls, jint handle, jint message, jint wParam, jint lParam) {
+ return PostMessage((HWND) handle, message, wParam, lParam);
+}
+
+JNIEXPORT jint JNICALL Java_mimis_util_Native_mapVirtualKey(JNIEnv *env, jclass cls, jint map, jint type) {
+ return MapVirtualKey(map, type);
+}
+
+JNIEXPORT jboolean JNICALL Java_mimis_util_Native_isRunning(JNIEnv *env, jclass cls, jstring jprogram) {
+ const char *program = env->GetStringUTFChars(jprogram, 0);
+ PROCESSENTRY32 *pe32 = new PROCESSENTRY32;
+ bool bRunning = getProcessEntry32(program, pe32);
+ delete pe32;
+ return bRunning;
+}
+
+JNIEXPORT jboolean JNICALL Java_mimis_util_Native_terminate(JNIEnv *env, jclass cls, jstring jprogram) {
+ const char *program = env->GetStringUTFChars(jprogram, 0);
+ HANDLE *hProcess = new HANDLE;
+ bool bResult = false;
+ if (getProcess(program, hProcess)) {
+ bResult = TerminateProcess(*hProcess, 0);
+ }
+ delete hProcess;
+ return bResult;
+}
diff --git a/cpp/mimis/src/mimis.h b/cpp/mimis/src/mimis.h
new file mode 100644
index 0000000..b5417fa
--- /dev/null
+++ b/cpp/mimis/src/mimis.h
@@ -0,0 +1,61 @@
+#ifndef MIMIS_H_
+#define MIMIS_H_
+
+#include
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class: mimis_util_Native
+ * Method: getHandle
+ * Signature: (Ljava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_mimis_util_Native_getHandle
+ (JNIEnv *, jclass, jstring);
+
+/*
+ * Class: mimis_util_Native
+ * Method: sendMessage
+ * Signature: (IIII)I
+ */
+JNIEXPORT jint JNICALL Java_mimis_util_Native_sendMessage
+ (JNIEnv *, jclass, jint, jint, jint, jint);
+
+/*
+ * Class: mimis_util_Native
+ * Method: postMessage
+ * Signature: (IIII)I
+ */
+JNIEXPORT jint JNICALL Java_mimis_util_Native_postMessage
+ (JNIEnv *, jclass, jint, jint, jint, jint);
+
+/*
+ * Class: mimis_util_Native
+ * Method: mapVirtualKey
+ * Signature: (II)I
+ */
+JNIEXPORT jint JNICALL Java_mimis_util_Native_mapVirtualKey
+ (JNIEnv *, jclass, jint, jint);
+
+/*
+ * Class: mimis_util_Native
+ * Method: isRunning
+ * Signature: (Ljava/lang/String;)Z
+ */
+JNIEXPORT jboolean JNICALL Java_mimis_util_Native_isRunning
+ (JNIEnv *, jclass, jstring);
+
+/*
+ * Class: mimis_util_Native
+ * Method: terminate
+ * Signature: (Ljava/lang/String;)Z
+ */
+JNIEXPORT jboolean JNICALL Java_mimis_util_Native_terminate
+ (JNIEnv *, jclass, jstring);
+
+#ifdef __cplusplus
+}
+#endif
+#endif