<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Feeling

        三人行,必有我?guī)熝?/p>

       ::  :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
      185 隨筆 :: 0 文章 :: 392 評(píng)論 :: 0 Trackbacks
    上個(gè)星期在Sourceforge的Feeling項(xiàng)目下新增加了一個(gè)org.eclipse.swt.extension子項(xiàng)目,意在增強(qiáng)SWT的本機(jī)功能。我一向是SWT的Fans,不過卻很抵觸大型的RCP項(xiàng)目,喜歡only dependent SWT。經(jīng)過一個(gè)星期的努力,現(xiàn)在已經(jīng)整合了在Win32平臺(tái)下獲取系統(tǒng)、磁盤、內(nèi)存、CPU相關(guān)信息,注冊(cè)表,以及系統(tǒng)鉤子等功能,喜歡SWT的朋友可以試用。目前還沒有放出一個(gè)版本,請(qǐng)通過sf的CVS下載代碼:

    cvs -d:pserver:anonymous@feeling.cvs.sourceforge.net:/cvsroot/feeling login

    由于一直使用的都是Java,對(duì)Win32編程并不是非常熟悉。但局限于Java的功能,對(duì)我們有相當(dāng)大的限制,IBM就屢屢向突破這個(gè)限制,因此產(chǎn)生了SWT。這里我重點(diǎn)想說的是怎么使用Win32的系統(tǒng)鉤子。SWT里已經(jīng)包含了大量的Win32函數(shù),不過那都是局限于Eclipse的需要,如果Eclipse不需要,SWT是不予以優(yōu)先考慮的。通過SWT我們很容易使用線程鉤子監(jiān)控自己程序的鍵盤鼠標(biāo)事件,而且封裝的很好。但是想使用系統(tǒng)鉤子確是一件不可能的事情,先看看鉤子的函數(shù)原型:

    ?HHOOK?SetWindowsHookEx(?int??idHook,?HOOKPROC?lpfn,?HINSTANCE?hMod,?DWORD?dwThreadId);?


    idHook --
    系統(tǒng)鉤子類型,實(shí)際上是一個(gè)int值,具體的定義請(qǐng)看MSDN
    lpfn -- 鉤子回調(diào)函數(shù)指針,當(dāng)收到鉤子消息時(shí)就執(zhí)行這個(gè)回調(diào)函數(shù),回調(diào)函數(shù)有3個(gè)參數(shù),不同類型的鉤子這3個(gè)參數(shù)有不同的含義,具體請(qǐng)看MSDN。
    hMod -- DLL實(shí)例句柄(我猜是這樣,我不熟悉Win32API編程),當(dāng)鉤子為系統(tǒng)鉤子時(shí)這個(gè)參數(shù)是必須的,如果是單個(gè)程序或者線程使用的鉤子那么可以不用這個(gè)值。
    dwThreadId -- 線程ID,如果是單個(gè)程序或者線程使用的鉤子這個(gè)參數(shù)是必須的。

    在SWT生成的DLL中,并沒有系統(tǒng)鉤子必須用到的hMod,并不像一般的DLL有DllMain入口可以接受到DLL實(shí)例句柄。因此我們只要在JNI下的C代碼里添加這個(gè)DLL實(shí)例句柄就可以完成系統(tǒng)鉤子的功能了:

    #define?Dll_Export?__declspec(dllexport)

    HINSTANCE?instance?
    =?NULL;

    BOOL?APIENTRY?DllMain(HINSTANCE?hInstance,?DWORD??ul_reason_for_call,?LPVOID?lpReserved)
    {
    ????instance?
    =?hInstance;
    ????
    return?TRUE;
    }


    Dll_Export?HHOOK?SetHook(
    int?hookType,HOOKPROC?hookproc)
    {
    ????
    return?SetWindowsHookEx(hookType,?hookproc,?instance,?NULL);
    }


    Dll_Export?BOOL?UnHook(HHOOK?hook)
    {
    ????
    if(hook?!=?NULL)
    ????????
    return?UnhookWindowsHookEx(hook);
    ????
    else
    ????????
    return?0;
    }


    #ifndef?NO_SetSystemHook
    JNIEXPORT?jint?JNICALL?Swt_extension_NATIVE(SetSystemHook)
    ????(JNIEnv?
    *env,?jclass?that,?jint?arg0,?jint?arg1)
    {
    ????jint?rc?
    =?0;
    ????rc?
    =?(jint)SetHook(arg0,?(HOOKPROC)arg1);
    ????
    return?rc;
    }

    #endif

    #ifndef?NO_UnSystemHook
    JNIEXPORT?jboolean?JNICALL?Swt_extension_NATIVE(UnSystemHook)
    ????(JNIEnv?
    *env,?jclass?that,?jint?arg0)
    {
    ????jboolean?rc?
    =?0;
    ????rc?
    =?(jboolean)UnHook((HHOOK)arg0);
    ????
    return?rc;
    }

    #endif

    那么通過SWT來實(shí)現(xiàn)系統(tǒng)鉤子有多大難度呢?各位看看代碼就知道了:

    Callback?callback?=?new?Callback?(this,?"keyHook",?3);?//$NON-NLS-1$
    int?proc?=?callback.getAddress?();
    hook?
    =?Extension.SetSystemHook(13,?proc);

    ………………………………

    int?keyHook(int?nCode,int?wParam,int?lParam)
    {
    ????
    int?Result=OS.CallNextHookEx(hook,nCode,wParam,lParam);
    ????………………
    ????
    return?Result;
    }

    很簡(jiǎn)單吧^_^

    評(píng)論

    # re: SWT Extension:在Win32平臺(tái)下運(yùn)用Java使用注冊(cè)表和系統(tǒng)鉤子 2006-11-28 10:18 心內(nèi)求法
    頂了!
    另外想請(qǐng)教一下,文中的代碼是怎么發(fā)布的呢?  回復(fù)  更多評(píng)論
      

    # re: SWT Extension:在Win32平臺(tái)下運(yùn)用Java使用注冊(cè)表和系統(tǒng)鉤子 2006-11-28 18:53 三人行,必有我?guī)熝?/a>
    編輯器里有一個(gè)按鈕是編輯代碼的,點(diǎn)進(jìn)去copy你的代碼就好了  回復(fù)  更多評(píng)論
      

    # re: SWT Extension:在Win32平臺(tái)下運(yùn)用Java使用注冊(cè)表和系統(tǒng)鉤子 2006-11-29 11:20 心內(nèi)求法
    哦,好的,非常感謝  回復(fù)  更多評(píng)論
      

    # re: SWT Extension:在Win32平臺(tái)下運(yùn)用Java使用注冊(cè)表和系統(tǒng)鉤子 2007-08-24 09:03 WTE
    hook = Extension.SetSystemHook(13, proc);
    為什么不用swt的setWindowsHookEX()?是不是用這個(gè)函數(shù)須要有dll才能實(shí)現(xiàn)全局鉤子的功能?  回復(fù)  更多評(píng)論
      


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    GitHub |  開源中國(guó)社區(qū) |  maven倉庫 |  文件格式轉(zhuǎn)換 
    主站蜘蛛池模板: 91禁漫免费进入| 亚洲一级片内射网站在线观看| 亚洲精品乱码久久久久久V| 四只虎免费永久观看| 在线观看免费视频一区| 亚洲视频无码高清在线| 久久精品国产亚洲7777| 99re在线免费视频| 美女黄频a美女大全免费皮| 亚洲精品高清国产麻豆专区| 热99re久久免费视精品频软件| 中国一级毛片视频免费看| 亚洲中文无码亚洲人成影院| 日本亚洲国产一区二区三区| 成人av免费电影| 久操免费在线观看| 污污视频网站免费观看| 亚洲一卡2卡3卡4卡国产网站| 亚洲综合精品网站在线观看| 可以免费看黄视频的网站| 中文字幕成人免费高清在线| 亚洲午夜无码久久久久小说| 亚洲AV综合色区无码另类小说| 日本二区免费一片黄2019| 久久aⅴ免费观看| 日本一区二区在线免费观看| 精品亚洲成在人线AV无码| 亚洲日韩激情无码一区| 国产免费观看网站| 最新猫咪www免费人成| 曰批全过程免费视频在线观看无码| 亚洲aⅴ无码专区在线观看春色| 久久精品国产亚洲AV无码麻豆| 亚洲综合精品网站在线观看| 成人毛片18女人毛片免费| 97视频免费观看2区| a毛片在线看片免费| 一级一级一级毛片免费毛片| 色五月五月丁香亚洲综合网| 亚洲AV无码精品蜜桃| 亚洲女人18毛片水真多|