随笔 - 4, 文章 - 1, 评论 - 22, 引用 - 0
数据加载中……

获取Java程序的窗口句柄

    我们知道C++的每个窗体都对应着一个句柄HWND,通过这个句柄我们可以对这个窗口以及它的资源进行各种操作,比如让它前端显示等。那么操作系统给Java编写的窗体(Frame或者JFrame的对象或者子类对象)有没有分配这个唯一的HWND呢?
    用spy++查看一下,Frame或者JFrame的对象或者子类对象确实都是存在这个窗口句柄的,那么我们怎么来得到它呢?
    下面就是通过JNI取得这个句柄的代码。
 1HWND GetHwndOfJavaWindow(JNIEnv *env, jobject window)
 2{
 3    cout << "GetHwndOfJavaWindow" << endl;
 4
 5    HWND hwnd = NULL;
 6
 7    JAWT_DrawingSurface *ds;
 8    JAWT_DrawingSurfaceInfo *dsi;
 9    JAWT_Win32DrawingSurfaceInfo *win;
10
11    JAWT awt;
12    awt.version = JAWT_VERSION_1_3;
13    jboolean result = JAWT_GetAWT(env, &awt);
14    if(result == JNI_TRUE)
15    {
16        ds = awt.GetDrawingSurface(env, window);
17        jint lock = ds -> Lock(ds);
18        if(lock != JAWT_LOCK_ERROR)
19        {
20            dsi = ds -> GetDrawingSurfaceInfo(ds);
21            win = (JAWT_Win32DrawingSurfaceInfo *) dsi -> platformInfo;
22            
23            hwnd = win -> hwnd;
24
25            ds -> FreeDrawingSurfaceInfo(dsi);
26            ds -> Unlock(ds);
27            awt.FreeDrawingSurface(ds);
28        }

29    }

30
31    return hwnd;
32}

有了这个窗口句柄后,我们就可以让Java窗体也具有很多本地化的功能了,比如闪烁标题栏,禁止最大化最小化以及关闭按钮等。

posted on 2010-02-10 11:15 凯子 阅读(5843) 评论(2)  编辑  收藏 所属分类: JNI

评论

# re: 获取Java程序的窗口句柄[未登录]  回复  更多评论   

那么如何获得里面的控件呢?能给出一个解决方案吗
2010-03-30 14:13 | tony

# re: 获取Java程序的窗口句柄  回复  更多评论   

标记
2015-03-06 16:01 | jycggyh

只有注册用户登录后才能发表评论。


网站导航: