再次声明,请高人们原谅我用这样的问题影响你挑战难题的兴致,如果时间允许还请给在下一点提示
我想知道用现有的技术是否可以实现这样一个应用程序。背景是这样的。
首先, 我把一个网络游戏的区号,账号,密码存在记事本里,下以《热血传奇》为列。
然后, 我想写这样一个软件, 在我双击《热血传奇》.exe 的快捷图标后,它可以打开登录控件TfrmMain中窗口类名TComboBox的下拉菜单,选取与记事本中所存区号相吻合的区号选项并激活“进入游戏”botton,再把记事本里的账号和密码输入对应的Edit里,激活“确定”然后血还没冷的人就可以打宝PK了。(TfrmMain,TComboBox,botton,Edit是用spy++看到的,意思我不懂)
问:如果只针对〈传奇〉肯定可以写出来,但是把范围扩大到〈魔兽〉,QQ ,呢?各个游戏的登录方式不同,再如QQ中没有区号但是有隐身登录,自动登录等选项。也就是说我要一个可以自动输入所有需要区号,账号,密码,登录模式等选项的软件(在我合法拥有密码的条件下),现在的编程技术可以实现吗?
请大家指点迷津,解我困惑顺便再给点提示。我大学是学经济类专业的,现在想以制作这个软件为目标学习编程。有乐意晦人不倦的朋友请加我QQ346600686或者E-mail:zhizhuo04@sina.com
------解决方案--------------------
up
------解决方案--------------------
你就要要一个可以自动登陆的东东是不是,如果是的话说怎么麻烦干什么啊
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
所以你必须清楚游戏的数据封装,不然我们这里也就只能纸上谈兵而已
- Java code
//先封装一个数据封装的类,Player.javapackage 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.classpackage 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(); } } }