玩过extension win32 swt的大神来看看啊!!!

爱偷懒的程序猿 2013-11-05 01:19:43
最近有个小项目(桌面程序)是用java做的,做到一半发现,需要用到HOOK,这些头疼了,java去Hook那岂不是要写JNI了,网上找到一个好用的东西叫extension win32 swt , 这东西很强大 , 做出来的东西跟win32程序没两样,不用自己手动写JNI了,它都已经做好了,我们仍然按照java的编码习惯去做就行了。可是HOOK鼠标消息,键盘消息,都没问题,问题是我想获取另一进程界面上的控件内容,这可难倒了,不知道该怎么做,,,
玩过的大神,来给点意见啊!!
...全文
193 点赞 收藏 6
写回复
6 条回复
爱偷懒的程序猿 2013年11月06日
引用 5 楼 ysjian_pingcx 的回复:
哈哈,看到楼主这个问题,我想我可以帮你了,我最近在做RCP插件开发,底层就是基于SWT实现的,楼主也感受到了swt界面的美观了吧,这个和本地组件的样式是一样的呢。 其实楼主的问题,我不是很明白,如果是获取别的线程组件的信息,这个就涉及到一个类了Display,它是管理ui线程的,在一个线程试图获取另一个线程的ui组件是会抛异常的,可以尝试用该线程的Display来获取:

control.getShell().getDisplay().asyncExec(new Runnable() {
			@Override
			public void run() {
				
			}
		});
我不只是跨线程,是跨进程的,说白了,就是做个外挂,去获取别的进程的信息 。这个外挂是针对公司现有软件来做的,为了增加一些额外功能。 如果是一般的控件,我通过findWindow , sendmessage这两个方法就可以获取了,但是对于ListView、TreeView等控件就获取不到了。我想只能用Hook了,我以前用delphi做过这种勾取其他进程的控件内容。 可我现在用的是java了,难搞了!袁兄,能否给点建议? ps:swt extension win32里面有这几种类型的钩子 Hook.MOUSE ;//鼠标钩子 Hook.KEYBOARD;//键盘钩子 Hook.GETMESSAGE ;//系统消息钩子 Hook.CALLWNDPROC; Hook.CALLWNDPROCRET ; 后两个不懂怎么用 通过Hook.GETMESSAGE是可以截获系统消息的。但达不到我想要的效果,,,
回复 点赞
袁慎建@ThoughtWorks 2013年11月05日
哈哈,看到楼主这个问题,我想我可以帮你了,我最近在做RCP插件开发,底层就是基于SWT实现的,楼主也感受到了swt界面的美观了吧,这个和本地组件的样式是一样的呢。 其实楼主的问题,我不是很明白,如果是获取别的线程组件的信息,这个就涉及到一个类了Display,它是管理ui线程的,在一个线程试图获取另一个线程的ui组件是会抛异常的,可以尝试用该线程的Display来获取:

control.getShell().getDisplay().asyncExec(new Runnable() {
			@Override
			public void run() {
				
			}
		});
回复 点赞
爱跳舞的铅笔头 2013年11月05日
哦哦,是这样啊,楼主把SWT Win32 Extension研究明白了,要记得分享哦
回复 点赞
爱偷懒的程序猿 2013年11月05日
引用 2 楼 baohuan_love 的回复:
java hook技术是薄弱的,只能用c语言是实现hook,然后封装成dll,用java调用dll.
恩,我知道,只是偶然间发现SWT Win32 Extension挺好用的 , 但它的demo中没有看到消息钩子的用法。 就算写JNI也行,我现在遇到的问题是要勾取一个表格的控件内容,比如任务管理器的那个列表。我现在只能拿到那些Label、button、edit等这些简单控件的内容~怎么才能拿到那些复杂控件的内容呢?谢谢!
回复 点赞
爱跳舞的铅笔头 2013年11月05日
java hook技术是薄弱的,只能用c语言是实现hook,然后封装成dll,用java调用dll.
回复 点赞
爱偷懒的程序猿 2013年11月05日
反了,是SWT Win32 Extension
回复 点赞
发动态
发帖子
Java SE
创建于2007-09-28

3.4w+

社区成员

30.7w+

社区内容

Java 2 Standard Edition
社区公告
暂无公告