Feeling
三人行,必有我師焉
:: ::
新隨筆
::
聯系
:: ::
管理
::
185 隨筆 :: 0 文章 :: 392 評論 :: 0 Trackbacks
<
2007年12月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(53)
給我留言
查看公開留言
查看私人留言
隨筆檔案
(85)
2021年3月 (1)
2016年11月 (1)
2016年9月 (2)
2016年5月 (1)
2013年3月 (1)
2012年11月 (5)
2012年10月 (2)
2012年5月 (3)
2012年1月 (4)
2011年12月 (5)
2010年9月 (1)
2010年8月 (2)
2010年3月 (1)
2009年9月 (2)
2009年4月 (1)
2009年2月 (1)
2008年12月 (1)
2008年10月 (1)
2008年9月 (1)
2008年7月 (1)
2008年6月 (3)
2008年5月 (3)
2008年4月 (3)
2008年3月 (2)
2008年1月 (1)
2007年12月 (3)
2007年9月 (4)
2007年7月 (2)
2007年6月 (3)
2007年5月 (2)
2007年4月 (6)
2007年3月 (1)
2007年1月 (3)
2006年12月 (2)
2006年11月 (4)
2006年7月 (1)
2006年6月 (5)
朋友圈
MSN Space同步
(rss)
SWT Extension Project
搜索
積分與排名
積分 - 451315
排名 - 120
最新評論
1.?re: Java反編譯工具 Eclipse Class Decompiler 2.0 已發布,支持多種反編譯器
你好 安裝插件后 還是debug不了啊
--ww
2.?re: Java反編譯工具 Eclipse Class Decompiler 2.0 已發布,支持多種反編譯器
eclipse加語言參數 -nl en_us
--cnfree
3.?re: Java反編譯工具 Eclipse Class Decompiler 2.0 已發布,支持多種反編譯器
請問下,我安裝后顯示的文字什么的是中文的,怎么樣能改成英文的嗎?
--SAnny
4.?re: Java反編譯工具 Eclipse Class Decompiler 2.0 已發布,支持多種反編譯器
@hh
雙擊你要反編譯的class文件,才會出現菜單,菜單是綁定類查看器的
--cnfree
5.?re: Java反編譯工具 Eclipse Class Decompiler 2.0 已發布,支持多種反編譯器[未登錄]
我安裝后菜單欄上沒有反編譯菜單。該怎么辦啊?
--hh
閱讀排行榜
1.?三國全面戰爭1.9a修改器3.9版(2012年4月1日更新)(119731)
2.?【原創】Eclipse Class Decompiler——Java反編譯插件(92536)
3.?Redhat,Ubuntu,SUSE的初淺比較(30130)
4.?三國志11制霸模式勇將集結不復活單挑14最強武將技巧(20179)
5.?Eclipse3.4 插件配置Reset(7821)
評論排行榜
1.?三國全面戰爭1.9a修改器3.9版(2012年4月1日更新)(85)
2.?【原創】Eclipse Class Decompiler——Java反編譯插件(43)
3.?Redhat,Ubuntu,SUSE的初淺比較(27)
4.?準備對SWT-Extension realease了(17)
5.?三國志11制霸模式勇將集結不復活單挑14最強武將技巧(16)
準備對SWT-Extension realease了
SWT-Extension這個項目做了很久,但一直都沒有realease,只是個人做著玩玩,很重要的一個原因是對Windows System Hook的機制沒有能夠很好地實現出來。Hook本身不算是很難的技術,在C++,C#里都能夠很容易的實現,為什么運用Java就那么困難呢?
首先當然主要還是我個人對C++并不在行了,其次就是Java和C++交互的問題了。要想通過C++把數據傳給Java,就要通過JNI標準的接口來實現,也就是要通過 JNIENV 來實現,但是HookProc 這個CallBack 是給系統進程調用的,不是給你Java調用的,你說系統進程調用了 HookProc 之后,沒法把這個事件傳遞給Java,那么還有一個方法,用Java不間斷的輪循Hook里的數據,這倒是能實現,網上也有一個老外的例子,但不好的地方就是當我系統沒工作的時候,你Java還在那兒輪循我干嘛?這不是浪費資源嗎?所以呢,這解鈴還需系鈴人,系統的事件還得讓系統來通知你才好。在Java里,有一個IO阻塞,比如當調用System.in.read()的時候,系統就是等待你的輸入,如果你不輸入,系統就一直等著不工作。還有線程,有wait方法,非要等著其他的線程通過notify把你喚醒你才能工作。在C++里也有這么一套機制:CreateEvent 和WaitForSingleObject,也就是說我先創建一個事件,然后將這個事件置于未激活狀態,讓它一直等待,將線程阻塞住,當HookProc被系統進程調用的時候,就將這個事件激活,通知Java程序你可以開始干活了,干完活以后再次被阻塞,直到這個Hook被uninstall掉。當然這其中還有一些 C++ 代碼的細節性問題,比如怎么讓不同的進程共享同一個事件,這里要說明的就是不同的進程可以共享同一個事件,但是不能共享同一個事件句柄,同一個事件,在不同的進程里有不同的句柄,句柄是不能跨進程的。
我個人認為Hook應當是SWT-Extension里一個很重要的組成部分,SWT本身只能實現線程鉤子,對于系統級的鉤子無能為力。因為系統機鉤子需要實現數據共享操作,還需要DLL入口句柄,這些我已都在SWT-Extension中實現了。唯一讓我遺憾的是沒有辦法實現日志鉤子,這是一個很有用的鉤子,可以用來記入當前用戶行為的操作,然后重新演示,我想如果做自動化測試這個會很有用,或者給游戲軟件練功什么的,呵呵。之所以不能實現是因為這個鉤子很特別,它要的不是DLL的句柄,而是應用程序的句柄,這沒有辦法從Java程序里獲得,我試過javaw.exe,但是也不行,會導致系統假死。以后有時間在研究吧。
做完Hook,終于可以松一口氣,發一個小小的realease了,剩下的就是document工作要做了,一個枯燥無味的工作,就當練習一下英語好了。
這里發一個Hook的截圖:
沒有了標題欄的Eclipse
最新的Build和代碼也可以在
http://feeling.sf.net
上下載了。
posted on 2007-12-07 15:08
三人行,必有我師焉
閱讀(2467)
評論(17)
編輯
收藏
評論
#
re: 準備對SWT-Extension realease了[未登錄]
2007-12-07 17:41
差沙
樓主佩服,這方面不是很懂, 但一看就是好東東,強帖留名
回復
更多評論
#
re: 準備對SWT-Extension realease了
2007-12-08 03:18
gr8vyguy
挺好的,只是點File System導致JVM退出。
其實我也做了一些這方面的擴展。包括Hook。還沒看你的Hook的怎么實現的。
我是用SWT的OS.SetWindowsHookEx + org.eclipse.swt.internal.Callback.
不需要再定義native的函數。只是實現了鍵盤和鼠標兩個鉤子。
另外你的Registry基本是抄Core Java II里的吧,我做了一套仿C#里Registry的接口的。
有意的話,我可以把我的代碼捐出來,加到你的Project里!
還有這個最好叫SWT Extension on Windows。
回復
更多評論
#
re: 準備對SWT-Extension realease了[未登錄]
2007-12-08 11:41
BeanSoft
支持!
回復
更多評論
#
re: 準備對SWT-Extension realease了
2007-12-08 18:45
三人行,必有我師焉
To:gr8vyguy
我知道你的Hook的做法,不過那只能實現線程鉤子,我想實現的是系統全局鉤子,不是一個概念。Core Java II 我沒有看過,不知道里面有Registry的實現。File System導致JVM退出,遺留的Bug,暫時不知道怎么解決。
回復
更多評論
#
re: 準備對SWT-Extension realease了
2007-12-09 04:03
gr8vyguy
@三人行,必有我師焉
我實現的是絕對是系統全局鉤子。
Registry? 那就奇怪了,我再仔細看看,如果搞錯了那就不好意思了。
回復
更多評論
#
re: 準備對SWT-Extension realease了
2007-12-09 13:32
cnfree
@gr8vyguy
全局鈎子嗎?不可能用swt實現的,因為沒有dll的handle,是無法實現數據共享的。如果你確信你真的實現了,拜托你給我一個例子,不甚感激。你說的那種方法我很久以前就嘗試過了,但是沒有搞定。
http://www.aygfsteel.com/cnfree/archive/2006/11/27/83754.html
,我以前的一篇文章,當時以為實現了,后來發現數據在Java的HookProc里無法共享,也就是說,你能拿到 LParam,但是取不出相關數據,只能用用WParam,因此就算你可以實現全局鉤子,你說的那種Case是無法獲得所有的信息。
別人的文章:
http://www.javaworld.com.tw/jute/post/view?bid=35&id=175440&sty=3&age=0
PS:我已經做成了插件,可以直接在插件開發中使用了。
回復
更多評論
#
re: 準備對SWT-Extension realease了
2007-12-09 20:26
gr8vyguy
@cnfree
沒有全局的鉤子我的抓圖軟件怎么實現
http://www.aygfsteel.com/xilaile/archive/2007/05/02/114983.html
普通的鉤子函數的確需要定義在獨立的DLL中才能掛進去,不過你不要忘了還存在一類Low Level的鉤子,不需呀dll的
回復
更多評論
#
re: 準備對SWT-Extension realease了
2007-12-10 11:47
三人行,必有我師焉
@gr8vyguy
沒有JDK1.6,所以運行不起來,但是看過了你的代碼。
1,你添加了2個native方法:
static final native boolean InstallMouseHook(int i, int j);
static final native boolean UninstallMouseHook(int i);
所以我不能從你的程序里斷定你用的是哪種鉤子
2,和我上個回復所說的一樣,你只是使用了wParam,沒有用到lParam,
wParam 包含了Mouse行為信息, lParam則是一個MSLLHOOKSTRUCT結構體指針,我想你應該是不能夠根據這個指針拿到結構體的,而MSLLHOOKSTRUCT可以用來拿到坐標信息。其實就對窗口某一部位截圖而言,根本就不需要Hook,SWT+Swing的Robot就可以實現了。
好了不用再爭論了,Mouse Hook自有 Mouse_LL沒有的優勢,可以在98下運行,保證了系統兼容性。畢竟連純C#也只能實現Mouse_LL和Keyboard_LL兩種Hook。
我現在還有點問題,就是如果我要攔截Hook,比如我以前的一個需求,攔截一個瀏覽器的菜單讓它不顯示出來,如果瀏覽器嵌在Java程序內部,那么在Java內部的HookProc正好處理這個事件,但是如果攔截的外部的瀏覽器,又該如果解決。
回復
更多評論
#
re: 準備對SWT-Extension realease了
2007-12-10 15:26
gr8vyguy
HookProc應該先于WindowProc, 判斷一下,不下傳不就行了
回復
更多評論
#
re: 準備對SWT-Extension realease了
2007-12-10 16:38
三人行,必有我師焉
@gr8vyguy
是的,關鍵是現在的Hookproc是在C++里實現的,和Java完全沒有關系,如果在Java實現,就無法數據共享了。但是判斷是否下傳的邏輯是在Java里,我在考慮怎么把這兩者結合起來。
回復
更多評論
#
re: 準備對SWT-Extension realease了
2007-12-12 17:18
leigh
可以使用 DuplicateHandle 來實現跨進程的句柄。
回復
更多評論
#
re: 準備對SWT-Extension realease了
2007-12-12 18:21
三人行,必有我師焉
跨進程我已經實現了,在Java里攔截JNI的HookProc,并對數據做出一些修改,這才是困難所在。
回復
更多評論
#
re: 準備對SWT-Extension realease了
2008-01-08 18:02
黑靈
good job
回復
更多評論
#
re: 準備對SWT-Extension realease了
2008-05-16 22:08
brucehu
請問你那個不需要jre的程序是怎么實現的
回復
更多評論
#
re: 準備對SWT-Extension realease了
2009-06-20 11:02
狄德羅
有沒有SWT linux Extension我想用這個在linux下實現窗口失去鍵盤焦點
回復
更多評論
#
re: 準備對SWT-Extension realease了[未登錄]
2012-05-07 13:58
滌生
哥們你這個keyproess有bug.一旦遇到系統的alert觸發的時候就掛了
回復
更多評論
#
re: 準備對SWT-Extension realease了[未登錄]
2013-11-15 15:13
javapon
想對USB做個監聽,發現用這個方法Hook.CALLWNDPROC 有的時候能監聽到鼠標的拔出和插入, 由于對C一頭霧水,請問如果是這個方法 ,usb設備插入和拔出對應的HookData.getMessage是多少,
回復
更多評論
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
Powered by:
BlogJava
Copyright © 三人行,必有我師焉
GitHub
|
開源中國社區
|
maven倉庫
|
文件格式轉換
主站蜘蛛池模板:
仪陇县
|
武穴市
|
九江县
|
泰宁县
|
兴业县
|
新蔡县
|
鸡东县
|
皋兰县
|
江西省
|
南华县
|
武陟县
|
增城市
|
布拖县
|
城步
|
肇东市
|
锡林郭勒盟
|
苏尼特左旗
|
额尔古纳市
|
如皋市
|
五河县
|
柯坪县
|
黔南
|
墨竹工卡县
|
吉首市
|
佳木斯市
|
山阴县
|
新河县
|
沭阳县
|
根河市
|
水富县
|
扎兰屯市
|
武隆县
|
承德县
|
湖州市
|
杭锦旗
|
汤原县
|
上饶县
|
雅江县
|
江油市
|
江北区
|
铁岭县
|