急!急!急!请问win32api参数乱码如何解决!

  我想做一个QQ自动登陆,使用的QQ是2009.现在先模拟打开QQ,然后通过api调用回调函数。回调函数为一个委托方法,但是在方法中整个参数乱码,请问如何解决?

  具体流程为,启动QQ,获取当前启动QQ的句柄,通过EnumChildWindows方法回调方法,但是在EnumWindowsProc中,account和pwd乱码。请问如何解决?

        public delegate bool CallBack(IntPtr hwnd, int lParam, string account, string pwd );


        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        static extern IntPtr EnumChildWindows(IntPtr hWndParent, CallBack lpEnumFunc, int lParam);

       /// <summary>
        /// QQ登录
        /// </summary>
        public static void LoginIn(string account = "123456", string pwd = "123456")
        {
            //启动QQ程序
            StartCmd();

            IntPtr h;
            string strName = "QQ2009";
            h = FindWindow(null, strName);
            if (h.ToInt32() != 0)
            {
                MoveWindow(h, 0, 0, 350, 300, true);
                CallBack myCallBack = new CallBack(EnumWindowsProc);
                EnumChildWindows(h, myCallBack, 0);
            }
        }

        /// <summary>
        ///将鼠标移动到登陆按钮
        /// </summary>
        /// <param name="h"></param>
        /// <param name="lParam"></param>
        /// <returns></returns>
        private static bool EnumWindowsProc(IntPtr h, int lParam, string account, string pwd)
        {
            //改变账号
            SetCursorPos(900, 530);
            SetForegroundWindow(h);
            SendMessage(h, 0x000C, IntPtr.Zero, account.ToString());

            //移动鼠标到登陆按钮
            SetCursorPos(1090, 645);
            SetForegroundWindow(h);
            mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
            return false;
        }

  

posted @ 2015-10-29 10:26  瀞默  阅读(825)  评论(7编辑  收藏  举报