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

解决方案 »

  1.   

    你就要要一个可以自动登陆的东东是不是,如果是的话说怎么麻烦干什么啊
    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();
    }
    }

    }
    就这么多,也没测试过,不知道行不行,思路基本上是这样~