jni 获得java窗口句柄
我们知道C++的每个窗体都对应着一个句柄HWND,通过这个句柄我们可以对这个窗口以及它的资源进行各种操作,比如让它前端显示等。那么操作系统给Java编写的窗体(Frame或者JFrame的对象或者子类对象)有没有分配这个唯一的HWND呢。需要使用库文件Java\jdk1.6.0_24\lib\jawt.lib
#include<windows.h> #include"jni.h"#include"jawt_md.h"#include"jni_md.h"HWND GetWndHandle(JNIEnv *env, jobject window){HWND hwnd = NULL; JAWT_DrawingSurface *ds; JAWT_DrawingSurfaceInfo *dsi; JAWT_Win32DrawingSurfaceInfo *win; JAWT awt; awt.version = JAWT_VERSION_1_3; jboolean result = JAWT_GetAWT(env, &awt); if(result == JNI_TRUE) { ds = awt.GetDrawingSurface(env, window); jint lock = ds -> Lock(ds); if(lock != JAWT_LOCK_ERROR) { dsi = ds -> GetDrawingSurfaceInfo(ds); win = (JAWT_Win32DrawingSurfaceInfo *) dsi -> platformInfo; hwnd = win -> hwnd; ds -> FreeDrawingSurfaceInfo(dsi); ds -> Unlock(ds); awt.FreeDrawingSurface(ds); } } return hwnd;}