■
package jp.sourceforge.winapi; public class WinApi { public static native boolean EnumWindows(WNDENUMPROC lpEnumFunc, Object lParam); static { System.loadLibrary("winapi"); } }
package jp.sourceforge.winapi; public interface WNDENUMPROC { boolean EnumWindowsProc(int hwnd, Object lParam); }
typedef struct tagWNDENUMPROCPARAM { JNIEnv *jnienv; jobject jEnumFunc; jobject jParam; } WNDENUMPROCPARAM; static BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) { WNDENUMPROCPARAM* param = (WNDENUMPROCPARAM*) lParam; JNIEnv *jnienv = param->jnienv; jclass clazz = jnienv->GetObjectClass(param->jEnumFunc); jmethodID methodID = jnienv->GetMethodID(clazz, "EnumWindowsProc", "(ILjava/lang/Object;)Z"); jboolean rc = jnienv->CallBooleanMethod(param->jEnumFunc, methodID, (jint)hwnd, param->jParam); return (BOOL) rc; } /* * Class: jp_sourceforge_winapi_WinApi * Method: EnumWindows * Signature: (Ljp/sourceforge/winapi/WNDENUMPROC;Ljava/lang/Object;)Z */ JNIEXPORT jboolean JNICALL Java_jp_sourceforge_winapi_WinApi_EnumWindows (JNIEnv *jnienv, jclass, jobject jEnumFunc, jobject jParam) { WNDENUMPROCPARAM param; param.jnienv = jnienv; param.jEnumFunc = jEnumFunc; param.jParam = jParam; BOOL rc = EnumWindows(EnumWindowsProc, (LPARAM)¶m); return (jboolean)rc; }