日期:2014-05-17  浏览次数:20717 次

客户要求后台监视他自己的电脑的键盘
本帖最后由 z1101385391 于 2013-11-18 16:53:34 编辑
客户要求后台监视他自己的电脑的键盘,当输入的时候字符串满足指定长度时就到数据库去查询看看有没有结果,后来发现监视键盘并不能知道客户输入了汉字,只能知道按了什么键,所以方案改成了监控客户输入的文本框,于是问题变成了如何监控客户正在输入的文本框的字符
下面的代码监视一般的文本框没问题,但不能监视浏览器里面的文本框
Win32Api这个类就不贴了吧,就是一堆DllImport的东西
实际调用EvaluateCaretPosition()函数来获取坐标caretPosition,


        Win32Api.GUITHREADINFO guiInfo;
        Point caretPosition;  
        public void GetCaretPosition()
        {
            guiInfo = new Win32Api.GUITHREADINFO();
            guiInfo.cbSize = (uint)Marshal.SizeOf(guiInfo);

            Win32Api.GetGUIThreadInfo(0, out guiInfo);
        }

        private void EvaluateCaretPosition()
        {
            caretPosition = new Point();

            GetCaretPosition();

            //caretPosition.X = (int)guiInfo.rcCaret.Left + 25;
            //caretPosition.Y = (int)guiInfo.rcCaret.Bottom + 25;

            Win32Api.ClientToScreen(guiInfo.hwndCaret, out caretPosition);

        }

private void WinProcTest_KeyUp(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.F2:
//这里是调用
                    EvaluateCaretPosition();
                    txtPoint.Text = caretPosition.ToString();
                    IntPtr ptr = Win32Api.WindowFromPoint(caretPosition.X, caretPosition.Y);
                    StringBuilder buffer = new StringBuilder(1024);
                    string w = "";
//这里获取文本框的值
                    IntPtr ptr1 = Marshal.StringToHGlobalAnsi(w);
                    Win32Api.SendMessage(ptr, Win32Api.WM_GETTEXT, 1024, ptr1);
              &nbs