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

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

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

    Feeling

        三人行,必有我師焉

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

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

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

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


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

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

    #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來實現系統鉤子有多大難度呢?各位看看代碼就知道了:

    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;
    }

    很簡單吧^_^
    posted on 2006-11-27 11:59 三人行,必有我師焉 閱讀(3685) 評論(4)  編輯  收藏

    評論

    # re: SWT Extension:在Win32平臺下運用Java使用注冊表和系統鉤子 2006-11-28 10:18 心內求法
    頂了!
    另外想請教一下,文中的代碼是怎么發布的呢?  回復  更多評論
      

    # re: SWT Extension:在Win32平臺下運用Java使用注冊表和系統鉤子 2006-11-28 18:53 三人行,必有我師焉
    編輯器里有一個按鈕是編輯代碼的,點進去copy你的代碼就好了  回復  更多評論
      

    # re: SWT Extension:在Win32平臺下運用Java使用注冊表和系統鉤子 2006-11-29 11:20 心內求法
    哦,好的,非常感謝  回復  更多評論
      

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


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    GitHub |  開源中國社區 |  maven倉庫 |  文件格式轉換 
    主站蜘蛛池模板: 国产在线国偷精品产拍免费| 亚洲国产成人久久一区久久| 亚洲欧洲无码AV不卡在线| 国外成人免费高清激情视频| 有色视频在线观看免费高清在线直播| 日本亚洲视频在线| 无限动漫网在线观看免费| av成人免费电影| 久久久久se色偷偷亚洲精品av| 亚洲AV无码不卡在线观看下载| 久章草在线精品视频免费观看| 亚洲欧美不卡高清在线| 亚洲Av无码精品色午夜| 女人张开腿等男人桶免费视频| 成人片黄网站色大片免费观看cn | 精品免费AV一区二区三区| 久久久久亚洲av成人无码电影| 在线看片v免费观看视频777| 国产成人综合亚洲绿色| 亚洲精品视频免费看| 亚洲国产日韩在线观频| 免费精品国偷自产在线在线| 久久性生大片免费观看性| 亚洲精品一卡2卡3卡四卡乱码| 久久亚洲国产成人亚| 亚洲国产精品无码久久九九| 国产精品69白浆在线观看免费| 在线涩涩免费观看国产精品| 国产亚洲精品精品精品| 亚洲一区二区三区免费在线观看 | 亚洲爆乳无码精品AAA片蜜桃| 亚洲AV日韩AV永久无码久久 | 免费在线观看黄网| 日本免费xxxx| 久久国产乱子伦精品免费一| 免费无码AV一区二区| 亚洲国产精品自在自线观看| 亚洲精品午夜视频| 亚洲AV无码乱码在线观看富二代| 亚洲国产精品无码久久久久久曰| 女人18毛片免费观看|