写了一个键盘模拟程序,想在robot工作的时候暂时锁定键盘,不响应用户的任何键盘和鼠标操作,请问高手应该调用哪个api啊?谢谢

解决方案 »

  1.   

    你可以找找全局键盘鼠标钩子,是Windows的Hook技术,Set一个全局的Hook就OK了。另外,这个Java本身是不可能完成的。必须jni。
      

  2.   

    class   CKeyHook:public   CObject   
      {   
      private:   
      HHOOK   glhHook;   
        
      public:   
      //   钩子类的构造函数   
      CKeyHook();   
      //   钩子类的析构函数   
      ~CKeyHook();   
      //   安装钩子函数   
      BOOL   StartHook(HWND   hWnd);   
      //   卸载钩子函数   
      BOOL   StopHook();   
        
      };   
        
        
      static   HWND   hIniDlg   =   NULL;//对话框句柄   
        
      CKeyHook::CKeyHook()   
      {   
      glhHook   =   NULL;     
      }   
        
      CKeyHook::~CKeyHook()   
      {     
      StopHook();   
      }   
      LRESULT   CALLBACK   KeyboardProc(int   nCode,WPARAM   wParam,LPARAM   lParam)   
      {     
      HWND   hFocus   =   ::GetActiveWindow();     //取得当前活动窗口句柄   
        
      if(nCode   ==   HC_ACTION   &&   hFocus   ==   hIniDlg)//焦点在对话框   
      {   
      BOOL   bKeyDowm   =   (lParam   &   0x80000000)   ?   FALSE   :   TRUE;     
      if(bKeyDowm   ==   TRUE)   
                      PostMessage(hFocus,WM_MY_HOTKEY,wParam,lParam);//自定义消息   return   1;//丢弃当前消息   }   
      return   0;//向下传递当前消息     
      }   
        
      BOOL   CKeyHook::StartHook(HWND   hWnd)   
      {   
      BOOL   bResult=FALSE;   
      hIniDlg   =   hWnd;   
      glhHook=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,NULL,0);   
        
      if(glhHook!=NULL)   
                      bResult=TRUE;   
      return   bResult;     
      }   
        
      BOOL   CKeyHook::StopHook()   
      {   
      BOOL   bResult=FALSE;   
      if(glhHook)   
      {   
      bResult=   UnhookWindowsHookEx(glhHook);   
      glhHook=NULL;   
      }   
        
      return   bResult;   
      }   
        
        
      //使用时设置键盘钩子   
      CKeyHook   m_hook;   
      m_hook.StartHook(this->GetSafeHwnd());     
        
      LRESULT   CMakeDlg::OnMyHotKey(WPARAM   wParam,LPARAM   lParam)   
      {     
      int   nVirtKey   =   (int)   wParam;         //   virtual-key   code     
      long   lKeyData   =   (long)lParam;       
        
      switch(nVirtKey)   
      {   
      case   'Z':   
      return   0;   
                          }   
      }   
    仅供参考
      

  3.   

    HelloWorld .javapublic class HelloWorld {
    public native void displayHelloWorld();//定义本地方法,注意native关键字
      static{
        System.loadLibrary("hello");
      }
      public static void main(String []args)
      {
        new HelloWorld().displayHelloWorld();
      }}
    命令行运行
    javah -jni HelloWorld生成
    HelloWorld.h/* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class HelloWorld */#ifndef _Included_HelloWorld
    #define _Included_HelloWorld
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     HelloWorld
     * Method:    displayHelloWorld
     * Signature: ()V
     */
    JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
      (JNIEnv *, jobject);#ifdef __cplusplus
    }
    #endif
    #endif
      

  4.   

    好象LINUX下也可以实现,只是不知道具体怎么做...
      

  5.   

    不知道,都没有怎么摸过Linux。