游戏中,先按一下Ctrl键后,就能进入自动攻击模式,再按住鼠标右键不放,就能进行自动攻击,如果松开右键,停止自动攻击,再按一下Ctrl,退出自动工具模式。
   现在想实现如下外挂功能,按一下某个键,如:A,就能进入自动攻击模式,并且进行自动攻击,再按一下A,退出停止自动攻击,并退出自动攻击模式。   给看看该如何实现,先谢了!

解决方案 »

  1.   

    怎么没有人回话啊,好不容易盼来csdn恢复,唉,人气真是的
    我有一个想法,先做一个全局的HOOK,用SetWindowsHookEx拦截到键盘操作如:A的按键,然后用keybd_event模拟两个按键(Ctrl、和鼠标右键的按下状态),不知道这种方法行吗,望api高手给个指点,如果行,该怎么实现啊。
      

  2.   

    你说的这种方法应该可以。只是,全局钩子需要的dll要用其他语言做好……
      

  3.   

    用vb确实很难的 建议使用vc
      

  4.   

    取得进程,对进程内的函数进行调用,用vb挺难,但也不是不可能,因为这些函数都来源于API.
    你的想法如果做出来就有点象加速的效果.但现在的外挂不是这样做的,是直接对进程传递信息,而不管windows是否有消息,就如所谓的挂机.
    vc的论坛中应该有一些资料,但也不多,被删的.
      

  5.   

    string b_npc_name = "店员";
    string b_npc_city = "比奇县";
    int    b_npc_x = 463, b_npc_y = 427;array  fs_books = ({ "大火球", "雷电术",   "击风",   "冰月震天",
                        "地狱火", "疾光电影", "风震天", "冰沙掌" ,"火墙","诱惑之光","抗拒火环"});array  ds_books = ({ "隐身术", "召唤骷髅",   "月魂灵波",   "治愈术",
                        "幽灵盾", "困魔咒", "集体隐身术",  });// 鉴定者的名字,对话坐标
    string i_npc_name = "华龙断珠";
    string i_npc_name2 = "比奇道长";
    int    i_npc_city = "比奇县";
    int    i_npc_x = 463, i_npc_y = 427; // 对话华龙断珠位置
    int    i_npc_x2 = 457, i_npc_y2 = 431; // 同时对话华龙断珠、比奇道长位置(如果想销售道士书籍有必要用这个坐标)void start()
    {
        mapping mc;
        string  book_name;
            string  book_name2;
        int     total;
            int     total2;
        //int     count;
        int     i;    // 首先设定所有的秘籍可卖,不优先,以免鉴定后无法出售
        for (i = 0; i < sizeof(fs_books); i++)
        {
            all_item_list[fs_books[i] + "(秘籍)"]["storage"] = 0;
            all_item_list[fs_books[i] + "(秘籍)"]["manage"]  = 1;
        }
                for (i = 0; i < sizeof(ds_books); i++)
        {
            all_item_list[ds_books[i] + "(秘籍)"]["storage"] = 0;
            all_item_list[ds_books[i] + "(秘籍)"]["manage"]  = 1;
        }    printf("开始自动鉴定书籍。\n");
        for (;;)
        {
            book_name = fs_books[0];
                    book_name2 = ds_books[0];
            total = 0;
                    total2 = 0;        mc = me()["carry"];
            for (i = sizeof(mc) - 1; i >= 0; i--)
                if (mc[i]["name"] == book_name)
                    total++;                        if (mc[i]["name"] == book_name2)
                    total2++;        if (total > 0)
                // 现在有还没有鉴定的书籍,直接前往鉴定
                goto start_identify;        // 跑到书商处
            printf("前往销售、购买书籍。\n");
            goto_city_ex(b_npc_city, b_npc_x, b_npc_y, 10);
        
            // 快速销售现有书籍
            sell_item(({ ITEM_BOOK }), b_npc_name, 0, 1);start_identify:;
            // 购买完毕,前往鉴定
            printf("前往鉴定书籍。\n");
            goto_city_ex(i_npc_city, i_npc_x, i_npc_y, 10);                        while (total-- > 0)
            {
                talk_to(i_npc_name);
                talk_to(i_npc_name, "查看");
                talk_to(i_npc_name, book_name);
                talk_to(i_npc_name, "学武功");
            }
        
            // 鉴定完毕,继续销售、购买                if (total2 > 0)
                // 现在有还没有鉴定的书籍,直接前往鉴定
                goto start_identify2;
        
    start_identify2:;
            // 购买完毕,前往鉴定
            printf("前往鉴定书籍。\n");
            goto_city_ex(i_npc_city, i_npc_x2, i_npc_y2, 10);
        }        while (total2-- > 0)
            {
                talk_to(i_npc_name2);
                talk_to(i_npc_name2, "查看");
                talk_to(i_npc_name2, book_name);
                talk_to(i_npc_name2, "学武功");
            }
    }// 启动时自动开始买书鉴定
    if((me()["carry"])==680) //680是自身负重,玩家可以按照自身能力调改
    {
    create_thread(QUEST_THREAD, "start");
    }
    // 卸载时停止
    private void destruct()
    {
        printf("停止。\n");
        delete_thread(QUEST_THREAD);
    }
      

  6.   

    VB开发太麻烦,用VC++来的快!
      

  7.   

    一个封包,包含有如下元素,也就是组成部分吧!
    1.需要传输的数据(主要的和最重要的部分就是这个,外挂修改的也是这部分)
    2.序列号(每个封包必须有自己的序列号,以便到了接收端后可以按照序列号重新组装)
    3.IP地址,一般都有这一部分,通过网络解析才知道封包从那里来,到那里去!
    当然封包的内容不止这些,但是,我们了解这些就够了。
    注意:在传输中,所有数据都是16位或者32位的,所以截获的封包看起来总是怪怪的!
    面给一个封包的基本格式,给大家看看(下面是基本封包格式,如果您可以背下来他们的格式,这对您修改游戏是非常有用的!强烈建议您看一些关于封包格式的文章,您就可以很容易地把封包看清楚,很快知道哪个才是真正的数据):
    Source Port (16) | Destination Port (16) 
    Sequence Number (32) 
    Acknowledgment Number (32) 
    Data Offset(4) | Reserved (6)|UGR|ACK|PSH|RST|SYN|FIN|Window(16) 
    Checksum (16) | Urgent Pointer (16) 
    Options (0 or more 32 bit words + padding) 
    DATA 
    ... 稍微注意以下,您可以看到,每行的长度都是32字节! 
    大家看到了吗?data就是数据,那是最关键的部分,我们使用WPE修改的就是那一部分!