这个问题太复杂了~~~楼主可以尝试使用注入,注入程序去调用TranslateMessage函数。
另外你最好到VC板块去问问.net里面做这方面的人比较少

解决方案 »

  1.   

    你可以给伴水发消息
    他Delphi比较牛
    应该做过类似的
      

  2.   

    lovefootball(蟑螂(生活就是扯淡--做人要放低姿态)) :
    谢谢你的答复?注入程序从来没有接触过,需要哪些相关背景知识吗?
      

  3.   

    http://blog.csdn.net/NicX/archive/2007/08/02/1721980.aspx
    看看这个
      

  4.   

    注入程序好像很难哪!
    如果非当前窗口状态实现不了的话,使用以下两个函数:
    void SetWindowToTopMost(int _mainWindowHandle)
            {
                SetWindowPos(_mainWindowHandle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
            }
            void CancelWindowTopMost(int _mainWindowHandle)
            {
                SetWindowPos(_mainWindowHandle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
            }
    来实现将非当前窗口设置为当前窗口。那么需要解决的一个问题是,在实现功能时必须排除键盘和鼠标输入的干扰。之前使用:
    //启动鼠标和键盘锁定
                this.EnableKeyBoardCapture();
                this.EnableMouseCapture();
    这段代码却没有把键盘、鼠标锁定,那如何才能锁定键盘、鼠标,又不影响SendMessage的使用?
      

  5.   

    这不就是反射吗
    有点自动化测试的意思
    using System.Reflection;
      

  6.   

    virusplayer() ,能说详细一点吗?mtsatDealProgram这个外部程序是用VC++写的。
      

  7.   

    如果你允许激活窗口的话屏蔽鼠标
    http://asp2net.net/Article/bianchengwenda/C/2007-5-28/2007052823264120.html
    屏蔽键盘
    http://topic.csdn.net/t/20020325/22/599562.html
      

  8.   

    那就要用SPY++看看它的层次结构
    然后初始化它,调用它
      

  9.   

    利用底层键盘钩子屏蔽任意按键
    http://blog.csdn.net/goodname008/archive/2004/08/21/80827.aspx
      

  10.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;
    using System.Diagnostics;
    using System.Reflection;namespace 鼠标键盘钩子实例
    {
        public partial class Form1 : Form
        {
            #region 锁定鼠标和键盘
            //有关鼠标和键盘钩子的相关定义
            static int hhookMouse = 0;
            static int hhookKeyBoard = 0;
            public const int WH_MOUSE_LL = 14;
            private const int WH_KEYBOARD_LL = 13;
            public const int HC_ACTION = 0;
            public delegate int HookProc(int nCode, IntPtr wParam, IntPtr iParam);
            HookProc MouseHookProcedure, KeyBoardHookProcedure;
            [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
            public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hinstance, int threadid);
            [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
            public static extern int CallNextHookEx(int idHook, int nCode, IntPtr wParam, IntPtr lParam);
            [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
            public static extern bool UnhookWindowsHookEx(int idHook);
            /// <summary>
            /// 钩子处理方法(鼠标锁定)
            /// </summary>
            /// <param name="nCode"></param>
            /// <param name="wParam"></param>
            /// <param name="lParam"></param>
            /// <returns></returns>
            private int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam)
            {
                //如果nCode<0,直接调用CallNextHookEx返回
                if (nCode < 0)
                    //return CallNextHookEx(hhookMouse,nCode,wParam,lParam);
                    return 1;
                //函数将消息向下传递,下一个钩子处理将截获这一消息
                //if(nCode!= HC_ACTION)
                //    return CallNextHookEx(hhookMouse, nCode, wParam, lParam);
                return 1;
            }
            /// <summary>
            /// 启动鼠标锁定
            /// </summary>
            /// <returns></returns>
            private bool EnableMouseCapture()
            {
                MouseHookProcedure = new HookProc(this.MouseHookProc);
                Process currentProcess = Process.GetCurrentProcess();            //安装全局鼠标钩子
                hhookMouse = SetWindowsHookEx(WH_MOUSE_LL, MouseHookProcedure, currentProcess.MainModule.BaseAddress, 0);
                if (hhookMouse == 0)
                    return false;
                return true;
            }
            /// <summary>
            /// 解除鼠标锁定
            /// </summary>
            /// <returns></returns>
            private bool DisableMouseCapture()
            {
                return UnhookWindowsHookEx(hhookMouse);
            }        /// <summary>
            /// 钩子处理方法(键盘锁定)
            /// </summary>
            /// <param name="nCode"></param>
            /// <param name="wParam"></param>
            /// <param name="lParam"></param>
            /// <returns></returns>
            private int KeyBoardHookProc(int nCode, IntPtr wParam, IntPtr lParam)
            {
                //如果nCode<0,直接调用CallNextHookEx返回
                if (nCode < 0)
                    return CallNextHookEx(hhookKeyBoard, nCode, wParam, lParam);
                    //return 1;
                //函数将消息向下传递,下一个钩子处理将截获这一消息
                if (nCode != HC_ACTION)
                    return CallNextHookEx(hhookKeyBoard, nCode, wParam, lParam);
                return 1;
            }
            /// <summary>
            /// 启动键盘锁定
            /// </summary>
            /// <returns></returns>
            private bool EnableKeyBoardCapture()
            {
                KeyBoardHookProcedure = new HookProc(this.KeyBoardHookProc);
                Process currentProcess = Process.GetCurrentProcess();
                //安装全局键盘钩子
                hhookKeyBoard = SetWindowsHookEx(WH_KEYBOARD_LL, KeyBoardHookProcedure, currentProcess.MainModule.BaseAddress, 0);
                if (hhookKeyBoard == 0)
                    return false;
                return true;
            }
            /// <summary>
            /// 解除键盘锁定
            /// </summary>
            /// <returns></returns>
            private bool DisableKeyBoardCapture()
            {
                return UnhookWindowsHookEx(hhookKeyBoard);
            }        #endregion
            public Form1()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                EnableKeyBoardCapture();
                EnableMouseCapture();
            }
        }
    }各位,上面这段代码单独试验过了,可行。但是把它合并到我的程序当中去就不行,具体表现在EnableMouseCapture()后,不能锁死鼠标,移动鼠标时,鼠标还是能跳跃式移动,但移动非常缓慢,不能完全锁死鼠标。
      

  11.   

    同时锁死鼠标后,对我的程序有影响,表现在PostMessage(buttonHandleOfOpenFile, BM_CLICK, 0, 0));不能起作用了。难道说通过PostMessage发送的BM_CLICK消息也被当作实体鼠标消息截获了?
      

  12.   

    这几天都没人来看看吗?
    看来我的问题是很难都能解决了!唉!问题3、在将
    while (!PostMessage(buttonHandleOfOpenFile, BM_CLICK, 0, 0))
                {
                    Thread.Sleep(100);
                }
    处改用int lResult = SendMessage(buttonHandleOfOpenFile, BM_CLICK, 0, 0);
    时,能够打开“打开”对话框,但程序无法执行下去,也即lResult无法获得返回值,只有手动将“打开”对话框关闭时,程序才能执行下去,但也就无法实现程序功能了!这个问题有人知道是怎么回事吗?
    我猜可能是SendMessage需要一个结果才能返回导致程序执行不下去,那是不是要对“打开”对话框进行某项操作才能使SendMessage有结果呢?!