再次声明,请高人们原谅我用这样的问题影响你挑战难题的兴致,如果时间允许还请给在下一点提示
我想知道用现有的技术是否可以实现这样一个应用程序。背景是这样的。
首先, 我把一个网络游戏的区号,账号,密码存在记事本里,下以《热血传奇》为列。
然后, 我想写这样一个软件, 在我双击《热血传奇》.exe 的快捷图标后,它可以打开登录控件TfrmMain中窗口类名TComboBox的下拉菜单,选取与记事本中所存区号相吻合的区号选项并激活“进入游戏”botton,再把记事本里的账号和密码输入对应的Edit里,激活“确定”然后血还没冷的人就可以打宝PK了。(TfrmMain,TComboBox,botton,Edit是用spy++看到的,意思我不懂)
问:如果只针对〈传奇〉肯定可以写出来,但是把范围扩大到〈魔兽〉,QQ ,呢?各个游戏的登录方式不同,再如QQ中没有区号但是有隐身登录,自动登录等选项。也就是说我要一个可以自动输入所有需要区号,账号,密码,登录模式等选项的软件(在我合法拥有密码的条件下),现在的编程技术可以实现吗?
请大家指点迷津,解我困惑顺便再给点提示。我大学是学经济类专业的,现在想以制作这个软件为目标学习编程。有乐意晦人不倦的朋友请加我QQ346600686或者E-mail:[email protected]
我想知道用现有的技术是否可以实现这样一个应用程序。背景是这样的。
首先, 我把一个网络游戏的区号,账号,密码存在记事本里,下以《热血传奇》为列。
然后, 我想写这样一个软件, 在我双击《热血传奇》.exe 的快捷图标后,它可以打开登录控件TfrmMain中窗口类名TComboBox的下拉菜单,选取与记事本中所存区号相吻合的区号选项并激活“进入游戏”botton,再把记事本里的账号和密码输入对应的Edit里,激活“确定”然后血还没冷的人就可以打宝PK了。(TfrmMain,TComboBox,botton,Edit是用spy++看到的,意思我不懂)
问:如果只针对〈传奇〉肯定可以写出来,但是把范围扩大到〈魔兽〉,QQ ,呢?各个游戏的登录方式不同,再如QQ中没有区号但是有隐身登录,自动登录等选项。也就是说我要一个可以自动输入所有需要区号,账号,密码,登录模式等选项的软件(在我合法拥有密码的条件下),现在的编程技术可以实现吗?
请大家指点迷津,解我困惑顺便再给点提示。我大学是学经济类专业的,现在想以制作这个软件为目标学习编程。有乐意晦人不倦的朋友请加我QQ346600686或者E-mail:[email protected]
1,首先你的登陆界面是什么设计的,如果是C++的,这样建立C++ -> SQL(或者自己日志文件) -> java程序 -> sql(自己的日志文件) -> c++ , 这个做起来麻烦,不考虑
2,最好是自己用java.swing设计登陆界面,按自己的规则配置登陆的文件,通过自动读取配置文件后,将数据到包发到游戏服务器,但是难点是游戏的服务器的数据是怎么封装的,你要清楚,如果不知道,基本上是无法实现,(1也无法实现)
我现在在你清楚你知道服务器的数据是如何封装的来进行设计:
假设服务器的数据是这样封装的
1,游戏服务器地址
2,区号
3,游戏ID
4,游戏密码
5,登陆模式
6,我就假定以QQ为例吧
先建立一个登陆的配置文件login.txt
loginServerIP=www.qq.com.cn
ID=zhangsan
passWord=1234
loginMode=hermitlogin(不清楚QQ影身登陆是什么东西代表的可能是个Byte类型的如Byte choose= 0xxxxxxx,最高位为符号号,其他x位为模式位,如果是最低位代表影身登陆,就应该是00000001,到数据发到服务器后,我猜测是通过这样一个for循环
for(int i = 0 ; i < 7;i++){
byte n = 1<<i;
if((choose&n)) != 0)//将n与choose进行按位与{
则是什么模式
}else{
则不是什么模式
}
}
TypeClass=java.lang.String
所以你必须清楚游戏的数据封装,不然我们这里也就只能纸上谈兵而已//先封装一个数据封装的类,Player.java
package test02;public class Player {
private String ID;
private String passWord;
private String loginMode;
public Player(){
} public Player(String id, String passWord,
String loginMode) {
super();
ID = id;
this.passWord = passWord;
this.loginMode = loginMode;
} public String getID() {
return ID;
} public void setID(String id) {
ID = id;
} public String getPassWord() {
return passWord;
} public void setPassWord(String passWord) {
this.passWord = passWord;
} public String getLoginMode() {
return loginMode;
} public void setLoginMode(String loginMode) {
this.loginMode = loginMode;
}
public String toString(){
return this.ID+" " + this.passWord + " " + this.loginMode;
}
//写一个发送到服务器的信息
public void send(String serverip){
//具体的服务器IP,和数据
String s = this.toString();
//将s转换为服务器所接受的字节码,或者其他编码类型
//根据数据的封装,服务器的IP来发送,我这是根据对象的toString来发送
//假定服务器是通过解析String来执行操作的;
}
}//通过反射机制来动态加载文件和player.class
package test02;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Properties;public class LoginPlayer {
private static Properties p;
static{
p = new Properties();
try {
p.load(new FileInputStream("login.txt"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
String loginServerIP = p.getProperty("loginServerIP");
String ID = p.getProperty("ID");
String passWord =p.getProperty("passWord");
String loginMode = p.getProperty("loginMode");
String TypeClass = p.getProperty("TypeClass");
try {
Class<?> c = Class.forName("test02.Player");
Class<?> cc = Class.forName(TypeClass);
Constructor<?> con = null;
try {
con = c.getConstructor(cc,cc,cc,cc);
Object obj = null;
try {
obj = con.newInstance(ID,passWord,loginMode);
Method m = c.getDeclaredMethod("send", cc);
m.invoke(obj,loginServerIP);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
就这么多,也没测试过,不知道行不行,思路基本上是这样~