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