EasyTipsWork记事本软件
本软件是个记事本软件,是平常工作中用到大量的零碎的信息,
又不值得整理收藏,而平常需要不停的筛选里面的内容。
本软件记录分两类,一类是文件类的文件,支持多种文件的查找,
只要是里面记录的是文本信息,都可以在找到。
另一类是记录在数据库的信息,有平常记事本的基础功能。
这软件不同于比较强大的搜索软件,比如ANYTXT,但占用大量的存储控件和CUP资源。
本软件属于既查即用的功能,属于轻量级的绿色软件。
https://pan.baidu.com/s/1iltC8pNBBphoyAL7mTF7KQ
t1t9
FtpPlug_1.0.1 eclipse myeclipse
简单的 ftp telnet 项目本地文件夹 指定的文件 eclipse myeclipse 插件
launch4j java exe制作包工具
launch4j是Java应用程序的Windows本地可执行文件 (.exe) 封装器。提供了本地弹出屏幕,应用程序图标,JRE搜索或使用绑定的JRE,启动失败反馈,传递命令行参数,ant脚本。
Launch4j是一个开源的安装程序,将您的jar文件打包成操作系统的本地可执行文件,支持Windows, MacOS,Linux和Solaris。对于JRE,您可以嵌入在安装文件中,也可以在安装时提示用户下载正确的JRE版本。Launch4j更加吸引人的地方是,在启动Java程序之前或者之中,支持闪屏(splash screen)。
封装给java使用的 web报表 rm webrm 报表1.0.0.1版正式版
版本:1.0.0.1
更新日志:
1. 修正部分用户使用中用到插件的分割符号,致使插件不能正常使用,本版中间使用xml格式,不会和用户使用的符号有冲突。
2. 重新构件了ocx,jar两个地方的源码,使结构更
3. 增加图片、图表的支持
4。 增加了在线设计
5。增加对每个按纽是否可用的控制
注意事项:
1. 这个版本的功能和前一个版本的功能是一样的,如果运行得可以就可以不用更新
严重声名:
插件用到的第三方控件如果涉及版权问题,请自觉向其所再单位获得授权。
声明:
任何个人或组织可以自由使用,可以任意修改、复制、发布,但要保留本人的声明以遵重本人的劳动成果,并且不能用于任何商业目的。
本人提供的是免费报表,不与商家争长短,但希望对你有用:
使用方法:
范例使用的是access数据库,首先在odbc 注册ReportDemo.mdb 数据源,名字随你喜好,
然后修改classes文件下的 db.properties 的连接。
然后把项目放在tomcat下运行既可:
起作用的关键文件:RMVIEWP.CAB 文件,客户端插件
Lib下的两个包:rmview1.0.0.1.jar
使用接口:
package common.rmview;
/*
* 设计的第一步,首先定义字段的类型,
* 然后通过AddRow将结果加入缓存中
*
*/
import common.rmview.surperInterface.IDataSet;
import common.rmview.until.Types;
public interface IRMDataSet extends IDataSet {
public void addField(String fieldName, Types.filedType type, int fieldLength,
Boolean isNull);//1:将段类型加入
public void addField(String fieldName, Types type, int fieldLength);//1:将段类型加入,isNull 默认为 false
public void AddRow(IRMDataRecord rmd);//2:在 IRMDataRecord实现类赋值完成一条记录后使用一次,循环加入.
}
package common.rmview;
import common.rmview.surperInterface.IDataRecord;
/*
* 使用时的第二步
* 通过这个接口设置结果集
*/
public interface IRMDataRecord extends IDataRecord {
public void SetValue(String fieldName,Object objValue);
}
package common.rmview;
/*
* 第三步:
* 前面IDataSet,IRMDataRecord实现类完成后,通过此接口的实现类向html也面输出ie到ie以方便ocx的取值使用
*/
public interface IRMEngine {
final int rmf=1;
final int rls=2;
public void SetReportFile(String urlandFileName,int fileFormat);//1:设置报表路径及文件名称
public void AddClientDataSet(String dataSourceName,IRMDataSet rmd);//2:设置数据源名称以ocx使用,并把IRMDataSet实现的结果加入
public String CreateViewer();//3:生成在html页面的编码
}
具体的使用方法请参照 index.jsp
报表的使用方法请自己参照官方的文档
RM报表的设计请另行学习。
需要更高版本 请联系作者购买
新建QQ群:29672297
有疑问请发邮件到 lujianfu123@yahoo.com.cn
下期计划:进行对 fastReport的封装。不过也要看呼声如何再决定。
封装给java使用的 web报表 rm webrm 报表1.0.0.1版发行版
请移步:http://download.youkuaiyun.com/source/2881508
程序员工作日志,技巧收集助手
web报表工具
请移步:http://download.youkuaiyun.com/source/2881508
平时在我们编程过程中积累了大量的技巧和心得,可是
多起来就不好管理了。我写了这个程序方便管理我们的各
种技巧,支持Pascal、C/C++、C#、VB、Java的程序技巧
和源码。
源码可以到delphi盒子里面去下.
delphi dll窗体,多文档界面,dll对象传参数,接口 的demo
delphi dll窗体,多文档界面,dll对象传参数,接口,demo,适合初学者,中间用到 rm3.5报表插件,请另行下载
封装给java使用的 web报表 rm webrm 报表1.0.0.1版,升级版
请移步:http://download.youkuaiyun.com/source/2881508
版本:1.0.0.1
完全兼容 前一个版本
升级时同时更新 RMVIEWP.CAB、rmview1.0.0.1.jar(删除前一个版本的jar包,名称为:RMVIEW.JAR)
使用方法不变,无缝升级。
更新日志:
1. 修正部分用户使用中用到插件的分割符号,致使插件不能正常使用,本版中间使用xml格式,不会和用户使用的符号有冲突。
2. 重新构件了ocx,jar两个地方的源码,使结构更加清晰。
注意事项:
1. 这个版本的功能和前一个版本的功能是一样的,如果运行得可以就可以不用更新
声明:
任何个人或组织可以自由使用,可以任意修改、复制、发布,但要保留本人的声明以遵重本人的劳动成果,并且不能用于任何商业目的。
本人提供的是免费报表,不与商家争长短,但希望对你有用:
使用方法:
范例使用的是access数据库,首先在odbc 注册ReportDemo.mdb 数据源,名字随你喜好,
然后修改classes文件下的 db.properties 的连接。
然后把项目放在tomcat下运行既可:
起作用的关键文件:RMVIEWP.CAB 文件,客户端插件
Lib下的两个包:rmview1.0.0.1.jar,commons-logging.jar
使用接口:
package common.rmview;
/*
* 设计的第一步,首先定义字段的类型,
* 然后通过AddRow将结果加入缓存中
*
*/
import common.rmview.surperInterface.IDataSet;
import common.rmview.until.Types;
public interface IRMDataSet extends IDataSet {
public void addField(String fieldName, Types.filedType type, int fieldLength,
Boolean isNull);//1:将段类型加入
public void addField(String fieldName, Types type, int fieldLength);//1:将段类型加入,isNull 默认为 false
public void AddRow(IRMDataRecord rmd);//2:在 IRMDataRecord实现类赋值完成一条记录后使用一次,循环加入.
}
package common.rmview;
import common.rmview.surperInterface.IDataRecord;
/*
* 使用时的第二步
* 通过这个接口设置结果集
*/
public interface IRMDataRecord extends IDataRecord {
public void SetValue(String fieldName,Object objValue);
}
package common.rmview;
/*
* 第三步:
* 前面IDataSet,IRMDataRecord实现类完成后,通过此接口的实现类向html也面输出ie到ie以方便ocx的取值使用
*/
public interface IRMEngine {
final int rmf=1;
final int rls=2;
public void SetReportFile(String urlandFileName,int fileFormat);//1:设置报表路径及文件名称
public void AddClientDataSet(String dataSourceName,IRMDataSet rmd);//2:设置数据源名称以ocx使用,并把IRMDataSet实现的结果加入
public String CreateViewer();//3:生成在html页面的编码
}
具体的使用方法请参照 index.jsp
报表的使用方法请自己参照官方的文档
RMDesigner.exe 是个设计器(非本人开发,所有权属于其所在的组织),也可以使用delphi 的RM报表来设计
RM报表的设计请另行学习。
新建QQ群:29672297
有疑问请发邮件到 lujianfu123@yahoo.com.cn
下期计划:进行对 fastReport的封装。不过也要看呼声如何再决定。
RMI 的全套使用
web报表工具
请移步:http://download.youkuaiyun.com/source/2881508
不多说,除了RMI的学习外,gui对新手入门也是个不错的学习
/*
*此类适合在本地注册的RMI服务器,避免了使用了多个DOS的写法,只需要简单的给使用
*本类提供的方法即可。
*/
package common.rmiserver;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.Remote;
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;
//import java.rmi.RMISecurityManager;
import java.rmi.RemoteException;
import java.net.MalformedURLException;
import java.rmi.server.UnicastRemoteObject;
import common.zip.ZipClientSocketFactory;
import common.zip.ZipServerSocketFactory;
public final class RMIServer {
private Registry registry = null; // @jve:decl-index=0:
private String serverName = "RMIServer";
private String serverPath = "localhost";
private int port = 1099;
private Remote serverInterface = null;
private Boolean isStart = false;
private AllFace dataAllFace = null;
private int dataPort = 0;// 数据端口,0表示端口由RMI服务器动态生成.
private Remote stub;
public RMIServer() {
}
/*
* 使用默认端口,默认服务器名称,服务路径构造函数 use the default port,server name and the url
*/
public RMIServer(Remote obj) {
this.serverInterface = obj;
}
/*
* 使用默认端口,服务路径构造函数 use the default port and server url
*/
public RMIServer(String servername, Remote obj) {
this.serverName = servername;
this.serverInterface = obj;
}
/*
* 服务器为默认值的构造函数 use the default url
*/
public RMIServer(String servername, int port, Remote obj) {
this.port = port;
this.serverName = servername;
this.serverInterface = obj;
}
/*
* 适合1.4范围的版本,当然也适合5.0的版本
*/
public Boolean setStart() throws RemoteException, MalformedURLException,
NotImplementInterfaceException {
if (registry == null)
registry = LocateRegistry.createRegistry(port);
if (serverInterface == null) {
throw new NotImplementInterfaceException(
"not found the reote interface method!!");
}
Naming.rebind("rmi://"+serverPath + ":" + port + "/" + serverName,
serverInterface);
isStart = true;
return isStart;
}
/*
* jdk5.0以后的写法,在使用之前使用setXxx方法给对象赋值
*/
public Boolean start() throws RemoteException, MalformedURLException,
NotImplementInterfaceException {
if(stub==null)
stub = (Remote) UnicastRemoteObject.exportObject(dataAllFace,
dataPort);// 0表示端口随机生成.
if (registry == null)
registry = LocateRegistry.createRegistry(port,
new ZipClientSocketFactory(), new ZipServerSocketFactory());
setProperty(serverPath); //绑定IP
registry.rebind(serverName, stub);
isStart = true;
return isStart;
}
/*
* 如果有多个ip,则使用这个方法绑定指定的IP
*/
public void setProperty(String ip)
{
System.setProperty("java.rmi.server.hostname", ip);
}
/*
* close the server
*/
public void close() throws RemoteException, MalformedURLException,
NotBoundException {
//UnicastRemoteObject.unexportObject(dataAllFace, true);
Naming.unbind("rmi://"+serverPath + ":" + port + "/" + serverName);
isStart = false;
}
/*
* set server name,if not set the name,the service will use the default name
* "RMIServer"
*/
public void setServerName(String serverName) {
this.serverName = serverName;
}
/*
* set the server URL,default localhost "rmi://localhost"
*/
public void setServerPath(String serverPath) {
this.serverPath = serverPath;
}
/*
* set the server port default port is 1099.
*/
public void setPort(int port) {
this.port = port;
}
/*
* set then remote implement method
*/
public void setServerInterface(Remote serverInterface) {
this.serverInterface = serverInterface;
}
/*
* set the server Security
*/
public void setSecurityManager() {
/* if (System.getSecurityManager() == null) {
try {
// java -Djava.security.policy=policy.txt
// common.rmiserver.RMIServer
System.setSecurityManager(new RMISecurityManager());// 暂时不要安全设置,
} catch (java.rmi.RMISecurityException exc) {
throw exc;
}
}*/
}
/*
* set the remote method
*/
public void setDataAllFace(AllFace dataAllFace) {
this.dataAllFace = dataAllFace;
}
/*
* set the remote dataport
*/
public void setDataPort(int dataPort) {
this.dataPort = dataPort;
}
// -----------------------------------------------
/*
* return the server URL
*/
public String getServerPatth() {
return serverPath;
}
/*
* return remote method
*/
public Remote getserverInterface() {
return serverInterface;
}
/*
* return the server name
*/
public String getServerName() {
return serverName;
}
/*
* return the server use port
*/
public int getPort() {
return port;
}
/*
* return the server then action state
*/
public Boolean isStart() {
return isStart;
}
/*
* return remote method
*/
public AllFace getDataAllFace() {
return dataAllFace;
}
/*
* return remote dataport
*/
public int getDataPort() {
return dataPort;
}
}
java 调用delphi写的dll的全套资料,可运行
java 调用delphi写的dll的全套资料,可运行
封装给java使用的 web插件报表(修正版本)
请移步:http://download.youkuaiyun.com/source/2881508
这是个封装给java使用的 web插件报表,这个市场上已经存在,但是是个商业报表:
本人提供的是免费报表,不不敢与商家争长短,但系希望对你有用:
使用方法:
范例使用的是access数据库,首先在odbc 注册ReportDemo.mdb 数据源,名字随你喜好,
然后修改classes文件下的 db.properties 的连接。
然后把项目放在tomcat下运行既可:
起作用的关键文件:RMVIEWP.CAB 文件,客户端插件
Lib下的两个包:RMVIEW.jar,commons-logging.jar
使用接口:
package common.rmview;
/*
* 设计的第一步,首先定义字段的类型,
* 然后通过AddRow将结果加入缓存中
*
*/
import common.rmview.surperInterface.IDataSet;
import common.rmview.until.Types;
public interface IRMDataSet extends IDataSet {
public void addField(String fieldName, Types.filedType type, int fieldLength,
Boolean isNull);//1:将段类型加入
public void addField(String fieldName, Types type, int fieldLength);//1:将段类型加入,isNull 默认为 false
public void AddRow(IRMDataRecord rmd);//2:在 IRMDataRecord实现类赋值完成一条记录后使用一次,循环加入.
}
package common.rmview;
import common.rmview.surperInterface.IDataRecord;
/*
* 使用时的第二步
* 通过这个接口设置结果集
*/
public interface IRMDataRecord extends IDataRecord {
public void SetValue(String fieldName,Object objValue);
}
package common.rmview;
/*
* 第三步:
* 前面IDataSet,IRMDataRecord实现类完成后,通过此接口的实现类向html也面输出ie到ie以方便ocx的取值使用
*/
public interface IRMEngine {
final int rmf=1;
final int rls=2;
public void SetReportFile(String urlandFileName,int fileFormat);//1:设置报表路径及文件名称
public void AddClientDataSet(String dataSourceName,IRMDataSet rmd);//2:设置数据源名称以ocx使用,并把IRMDataSet实现的结果加入
/*
* 字符串组装方式:rm报表报表文件流base64码+"&&"+字段类型码+"&&"+结果集+"&&"+数据源名称
*/
public String CreateViewer();//3:生成在html页面的编码
}
具体的使用方法请参照 index.jsp
报表的使用方法请自己参照官方的文档
RMDesigner.exe 是个设计器,也可以使用delphi 的RM报表来设计
使用没有任何的限制。使用前多测试,看是否真正是你需要的。
有疑问请发邮件到 lujianfu123@yahoo.com.cn
新建QQ群:29672297
封装给java使用的 web插件报表 (修正版本)
http://download.youkuaiyun.com/source/1856731 (最新)
这是个封装给java使用的 web插件报表,这个市场上已经存在,但是是个商业报表:
本人提供的是免费报表,不不敢与商家争长短,但系希望对你有用:
使用方法:
范例使用的是access数据库,首先在odbc 注册ReportDemo.mdb 数据源,名字随你喜好,
然后修改classes文件下的 db.properties 的连接。
然后把项目放在tomcat下运行既可:
起作用的关键文件:RMVIEWP.CAB 文件,客户端插件
Lib下的两个包:RMVIEW.jar,commons-logging.jar
使用接口:
package common.rmview;
/*
* 设计的第一步,首先定义字段的类型,
* 然后通过AddRow将结果加入缓存中
*
*/
import common.rmview.surperInterface.IDataSet;
import common.rmview.until.Types;
public interface IRMDataSet extends IDataSet {
public void addField(String fieldName, Types.filedType type, int fieldLength,
Boolean isNull);//1:将段类型加入
public void addField(String fieldName, Types type, int fieldLength);//1:将段类型加入,isNull 默认为 false
public void AddRow(IRMDataRecord rmd);//2:在 IRMDataRecord实现类赋值完成一条记录后使用一次,循环加入.
}
package common.rmview;
import common.rmview.surperInterface.IDataRecord;
/*
* 使用时的第二步
* 通过这个接口设置结果集
*/
public interface IRMDataRecord extends IDataRecord {
public void SetValue(String fieldName,Object objValue);
}
package common.rmview;
/*
* 第三步:
* 前面IDataSet,IRMDataRecord实现类完成后,通过此接口的实现类向html也面输出ie到ie以方便ocx的取值使用
*/
public interface IRMEngine {
final int rmf=1;
final int rls=2;
public void SetReportFile(String urlandFileName,int fileFormat);//1:设置报表路径及文件名称
public void AddClientDataSet(String dataSourceName,IRMDataSet rmd);//2:设置数据源名称以ocx使用,并把IRMDataSet实现的结果加入
/*
* 字符串组装方式:rm报表报表文件流base64码+"&&"+字段类型码+"&&"+结果集+"&&"+数据源名称
*/
public String CreateViewer();//3:生成在html页面的编码
}
具体的使用方法请参照 index.jsp
报表的使用方法请自己参照官方的文档
RMDesigner.exe 是个设计器,也可以使用delphi 的RM报表来设计
使用没有任何的限制。使用前多测试,看是否真正是你需要的。
修正:增加支持多数据源,报表显示完成内存化,本地不存任何的数据
新建QQ群:29672297
有疑问请发邮件到 lujianfu123@yahoo.com.cn
java 报表工具,delphi 封装 rm报表
请移步:http://download.youkuaiyun.com/source/2881508
这是个封装给java使用的 web插件报表,这个市场上已经存在,但是是个商业报表:
本人提供的是免费报表,不敢与商家争长短,但求对你有用:
使用方法:
范例使用的是access数据库,首先在odbc 注册ReportDemo.mdb 数据源,名字随你喜好,
然后修改classes文件下的 db.properties 的连接。
然后把项目放在tomcat下运行既可:
起作用的关键文件:RMVIEWP.CAB 文件,客户端插件
Lib下的两个包:RMVIEW.jar,commons-logging.jar
新建QQ群:29672297
java 混淆工具,不可逆 jocky 也许是最好的了
一、前言
其他资源: web报表工具
http://download.youkuaiyun.com/source/2881508
1.1 什么是Jocky?
我们知道,Java是一种跨平台的编程语言,其源码(.java文件)被编译成与平台无关的字节码(.class文件),然后在运行期动态链接。这样,编译后的类文件中将包含有符号表,从而使得Java程序很容易被反编译。相信每一个Java开发人员,都曾经用过诸如Jad之类的反编译器,对Java的class 文件进行反编译,从而观察程序的结构与实现细节。如此一来,对于那些需要严格进行知识产权保护的Java应用,如何有效的保护客户的商业投资,是开发人员经常需要面对的问题。
于是就出现了Java混淆编译器,它的作用是打乱class文件中的符号信息,从而使反向工程变得非常困难。
Jocky就是这样一款优秀的Java混淆编译器。
1.2 为什么需要Jocky?
目前业界有不少商业的甚或是开源的混淆编译器,但它们普遍存在一些这样或者那样的问题。一般而言,现有的混淆器都是对编译好的 class文件进行混淆,这样就需要编译和混淆两个步骤。而事实上,并不是所有的符号都需要混淆。如果你开发的是一个类库,或者某些类需要动态装载,那些公共API(或者说:那些被publish出来的API)就必须保留符号不变,只有这样,别人才能使用你的类库。现有的混淆器提供了GUI或脚本的方式来对那些需要保留的符号名称进行配置,但如果程序较大时,配置工作将变得很复杂,而程序一旦修改,配置工作又要重新进行。某些混淆器能够调整字节码的顺序,使反编译更加困难,但笔者经历过混淆之后的程序运行出错的情况。
而Jocky与其它混淆编译器最大的不同之处在于:它是直接从源码上做文章,也就是说编译过程本身就是一个混淆过程。
1.3 Jocky是如何工作的?
Jocky混淆编译器是在Sun JDK中提供的Java编译器(javac)的基础上完成的,修改了其中的代码生成过程,对编译器生成的中间代码进行混淆,最后再生成class文件,这样编译和混淆只需要一个步骤就可以完成。另外可以在源程序中插入 符号保留指令 来控制哪些符号需要保留,将混淆过程与开发过程融合在一起,不需要单独的配置。
1.4 Jocky的作用
1.4.1代码混淆
如前文所述,混淆编译是Jocky的首要用途。我们举一个最简单的例子,下面的SimpleBean是未经混淆的class文件通过Jad反编译以后获得的源文件:
public class SimpleBean implements Serializable {
private String name = "myname";
private List myList = null;
public void SimpleBean() {
myList = new ArrayList(10);
}
public void foo1() {
myList.add("name");
}
private void foo2() {
}
private void writeObject(java.io.ObjectOutputStream out)
throws IOException {
}
}
下面是经Jocky混淆过的类文件,通过Jad反编译后产生的源文件:
public class SimpleBean implements Serializable {
private String _$2;
private List _$1;
public SimpleBean() {
_$2 = "myname";
this;
JVM INSTR new #4 ;
JVM INSTR dup ;
JVM INSTR swap ;
10;
ArrayList();
_$1;
}
public void foo1() {
_$1.add("name");
}
private void _$1() {
}
private void writeObject(ObjectOutputStream objectoutputstream){
throws IOException {
}
}
<Jock
封装给java使用的 web插件报表
请移步:http://download.youkuaiyun.com/source/2881508
这是个封装给java使用的 web插件报表,这个市面上已经存在,但是是个商业报表:
本人提供的是免费报表,不不敢与商家争长短,但求对你有用:
使用方法:
范例使用的是access数据库,首先在odbc 注册ReportDemo.mdb 数据源,名字随你喜好,
然后修改classes文件下的 db.properties 的连接。
然后把项目放在tomcat下运行既可:
起作用的关键文件:RMVIEWP.CAB 文件,客户端插件
Lib下的两个包:RMVIEW.jar,commons-logging.jar
使用接口:
package common.rmview;
/*
* 设计的第一步,首先定义字段的类型,
* 然后通过AddRow将结果加入缓存中
*
*/
import common.rmview.surperInterface.IDataSet;
import common.rmview.until.Types;
public interface IRMDataSet extends IDataSet {
public void addField(String fieldName, Types.filedType type, int fieldLength,
Boolean isNull);//1:将段类型加入
public void addField(String fieldName, Types type, int fieldLength);//1:将段类型加入,isNull 默认为 false
public void AddRow(IRMDataRecord rmd);//2:在 IRMDataRecord实现类赋值完成一条记录后使用一次,循环加入.
}
package common.rmview;
import common.rmview.surperInterface.IDataRecord;
/*
* 使用时的第二步
* 通过这个接口设置结果集
*/
public interface IRMDataRecord extends IDataRecord {
public void SetValue(String fieldName,Object objValue);
}
package common.rmview;
/*
* 第三步:
* 前面IDataSet,IRMDataRecord实现类完成后,通过此接口的实现类向html也面输出ie到ie以方便ocx的取值使用
*/
public interface IRMEngine {
final int rmf=1;
final int rls=2;
public void SetReportFile(String urlandFileName,int fileFormat);//1:设置报表路径及文件名称
public void AddClientDataSet(String dataSourceName,IRMDataSet rmd);//2:设置数据源名称以ocx使用,并把IRMDataSet实现的结果加入
/*
* 字符串组装方式:rm报表报表文件流base64码+"&&"+字段类型码+"&&"+结果集+"&&"+数据源名称
*/
public String CreateViewer();//3:生成在html页面的编码
}
具体的使用方法请参照 index.jsp
报表的使用方法请自己参照官方的文档
RMDesigner.exe 是个设计器,也可以使用delphi 的RM报表来设计
使用没有任何的限制。使用前多测试,看是否真正是你需要的。
有疑问请发邮件到 lujianfu123@yahoo.com.cn
修正版本地址:http://download.youkuaiyun.com/source/1427608