最近想写一个天堂1发信的外挂,一个人发给多个人。最初我以为找到文本框句柄sendmessage完了鼠标移动到“发信”按钮处点击就行了,点击做完了测试发现sendemessage没用。用spy++查看发现文本框窗体标题变成了我填写的,但是界面上没有,也就是说sendmessage和postmessage都没用。我猜游戏是采用了directinput做的文本框,那我要发信怎么办呢?用keybd_event只能一次一个字符,我要发信写的是中文啊肯定不行。网上有人说用hook注入监控api,这个我不会,哪位达人能讲清楚一些?
能实现C#填写directinput也行,或者想个办法能让我把目标文字放上去就行。如果用hook的话麻烦讲的更细一些还要些源码,我是第一次写这玩意儿。我用的是C#写的,C++和C太繁琐了,delphi的东西不懂。麻烦各位达人了,小弟跪求。

解决方案 »

  1.   

    我感觉怎么不像是directinput控件呢,directinput不支持shift加字母显示大写,而且能找到它的句柄用spy++
      

  2.   

    计算一下文本框的坐标,鼠标点一下sendkeys
      

  3.   

    窗口不是最小化,sendkeys这样的方法不行,我试过了。还是得用sendmessage方法,但是为啥就是不显示呢?别人的外挂怎么就可以?
      

  4.   

    跪求高手讲解啊,我已经确定了它肯定是用sendmessage或者postmessage函数了,因为看网上有个天堂发广告的外挂就是sendmessage方法,只是传了个“WM_USER+某个值”,不太明白什么意思
      

  5.   

      我是支持你的  !!  GO  GO 
      

  6.   

    为何不用CPP?难道您觉得天堂1是用C#开发出来的?
    另一方面可以直接通过端口发送数据,根本不用去模拟事件,这样岂不是更好?
      

  7.   

    好了~~~困扰我的问题被我解决了,还是postmessage方法和sendmessage方法,只不过我发现这两种方法发送的是字符不是字符串,这样的话只能把字符串拆分成字符数组一个个发送。不论效率怎么样,字已经上去了,keybd_event方法也可以一个个字符上去,但是没法中文。
    具体的代码我过两天整理好了发在blog上,跟大家分享。
      

  8.   

    用spy++查看发现文本框窗体标题变成了我填写 这个的错误。对楼主应该有作用。的。
      

  9.   

    直接socket模拟通讯,多简单的事
      

  10.   

     用这种方法试下: 应该可以的
     [DllImport("User32.dll", EntryPoint = "PostMessage")]
            private static extern int PostMessage(IntPtr hwnd, int Msg, IntPtr wParam, string lParam);string message = passWord;
                    for (int i = 0; i < message.Length; i++)
                    {
                        byte[] bt = Encoding.Default.GetBytes(message[i].ToString());
                        for (int j = 0; j < bt.Length; j++)
                        {
                            SendMessage(passWorld, WM_CHAR, bt[j], 1);
                        }
                    }